From b6623713a358772c66cc6bc6cb4c6d17c56e1942 Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Mon, 13 May 2024 15:42:49 +0900 Subject: [PATCH 01/17] everything --- Cargo.lock | 34 + core/Cargo.toml | 1 + core/src/operations/field/field_den.rs | 6 +- .../operations/field/field_inner_product.rs | 3 +- core/src/runtime/record.rs | 52 ++ core/src/runtime/syscall.rs | 38 +- core/src/syscall/precompiles/mod.rs | 2 + .../weierstrass/weierstrass_add.rs | 24 +- .../weierstrass/weierstrass_decompress.rs | 32 + .../weierstrass/weierstrass_double.rs | 11 +- core/src/utils/ec/mod.rs | 2 + core/src/utils/ec/weierstrass/mod.rs | 1 + core/src/utils/ec/weierstrass/secp256r1.rs | 156 ++++ core/src/utils/programs.rs | 12 + tests/secp256k1-add/Cargo.lock | 79 +- tests/secp256r1-add/Cargo.lock | 779 +++++++++++++++++ tests/secp256r1-add/Cargo.toml | 10 + .../elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 117088 bytes tests/secp256r1-add/src/main.rs | 46 ++ tests/secp256r1-decompress/Cargo.lock | 771 +++++++++++++++++ tests/secp256r1-decompress/Cargo.toml | 8 + .../elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 102560 bytes tests/secp256r1-decompress/src/main.rs | 27 + tests/secp256r1-double/Cargo.lock | 779 +++++++++++++++++ tests/secp256r1-double/Cargo.toml | 10 + .../elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 116660 bytes tests/secp256r1-double/src/main.rs | 38 + tests/secp256r1-mul/Cargo.lock | 781 ++++++++++++++++++ tests/secp256r1-mul/Cargo.toml | 9 + .../elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 124224 bytes tests/secp256r1-mul/src/main.rs | 42 + zkvm/entrypoint/src/syscalls/mod.rs | 11 + zkvm/entrypoint/src/syscalls/secp256r1.rs | 69 ++ zkvm/precompiles/Cargo.toml | 1 + zkvm/precompiles/src/lib.rs | 4 + zkvm/precompiles/src/secp256r1.rs | 237 ++++++ 36 files changed, 4044 insertions(+), 31 deletions(-) create mode 100644 core/src/utils/ec/weierstrass/secp256r1.rs create mode 100644 tests/secp256r1-add/Cargo.lock create mode 100644 tests/secp256r1-add/Cargo.toml create mode 100755 tests/secp256r1-add/elf/riscv32im-succinct-zkvm-elf create mode 100644 tests/secp256r1-add/src/main.rs create mode 100644 tests/secp256r1-decompress/Cargo.lock create mode 100644 tests/secp256r1-decompress/Cargo.toml create mode 100755 tests/secp256r1-decompress/elf/riscv32im-succinct-zkvm-elf create mode 100644 tests/secp256r1-decompress/src/main.rs create mode 100644 tests/secp256r1-double/Cargo.lock create mode 100644 tests/secp256r1-double/Cargo.toml create mode 100755 tests/secp256r1-double/elf/riscv32im-succinct-zkvm-elf create mode 100644 tests/secp256r1-double/src/main.rs create mode 100644 tests/secp256r1-mul/Cargo.lock create mode 100644 tests/secp256r1-mul/Cargo.toml create mode 100755 tests/secp256r1-mul/elf/riscv32im-succinct-zkvm-elf create mode 100644 tests/secp256r1-mul/src/main.rs create mode 100644 zkvm/entrypoint/src/syscalls/secp256r1.rs create mode 100644 zkvm/precompiles/src/secp256r1.rs diff --git a/Cargo.lock b/Cargo.lock index de99543221..f4d680ad07 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1422,6 +1422,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", + "pem-rfc7468", "zeroize", ] @@ -1603,6 +1604,7 @@ dependencies = [ "ff 0.13.0", "generic-array 0.14.7", "group 0.13.0", + "pem-rfc7468", "pkcs8", "rand_core", "sec1", @@ -2869,6 +2871,18 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + [[package]] name = "p3-air" version = "0.1.0" @@ -3209,6 +3223,15 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -3326,6 +3349,15 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "primitive-types" version = "0.12.2" @@ -4326,6 +4358,7 @@ dependencies = [ "nohash-hasher", "num", "num_cpus", + "p256", "p3-air", "p3-baby-bear", "p3-blake3", @@ -4404,6 +4437,7 @@ dependencies = [ "hex", "k256", "num", + "p256", "rand", "serde", "snowbridge-amcl", diff --git a/core/Cargo.toml b/core/Cargo.toml index e477ec2639..939002b734 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -46,6 +46,7 @@ curve25519-dalek = { version = "4.1.2" } elliptic-curve = "0.13.8" hex = "0.4.3" k256 = { version = "0.13.3", features = ["expose-field"] } +p256 = { version = "0.13.2", features = ["expose-field"] } num_cpus = "1.16.0" serde_with = "3.8.1" size = "0.4.1" diff --git a/core/src/operations/field/field_den.rs b/core/src/operations/field/field_den.rs index eab87631ca..3022d66284 100644 --- a/core/src/operations/field/field_den.rs +++ b/core/src/operations/field/field_den.rs @@ -113,9 +113,11 @@ where V: Into, { let p_a = Polynomial::from(*a); - let p_b = (*b).into(); + // let p_b = (*b).into(); // TODO: is this correct? + let p_b = Polynomial::from(*b); let p_result = self.result.into(); - let p_carry = self.carry.into(); + // let p_carry = self.carry.into(); + let p_carry = Polynomial::from(self.carry); // Compute the vanishing polynomial: // lhs(x) = sign * (b(x) * result(x) + result(x)) + (1 - sign) * (b(x) * result(x) + a(x)) diff --git a/core/src/operations/field/field_inner_product.rs b/core/src/operations/field/field_inner_product.rs index 070b174bd1..5a8481fcb5 100644 --- a/core/src/operations/field/field_inner_product.rs +++ b/core/src/operations/field/field_inner_product.rs @@ -116,7 +116,8 @@ where let p_a_vec: Vec> = a.iter().map(|x| (*x).into()).collect(); let p_b_vec: Vec> = b.iter().map(|x| (*x).into()).collect(); let p_result = self.result.into(); - let p_carry = self.carry.into(); + // let p_carry = self.carry.into(); + let p_carry = Polynomial::from(self.carry); let p_zero = Polynomial::::new(vec![AB::Expr::zero()]); diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 83210fcb22..096e9d82c8 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -81,12 +81,18 @@ pub struct ExecutionRecord { pub secp256k1_double_events: Vec, + pub secp256r1_add_events: Vec, + + pub secp256r1_double_events: Vec, + pub bn254_add_events: Vec, pub bn254_double_events: Vec, pub k256_decompress_events: Vec, + pub p256_decompress_events: Vec, + pub blake3_compress_inner_events: Vec, pub bls12381_add_events: Vec, @@ -119,6 +125,9 @@ pub struct ShardingConfig { pub keccak_len: usize, pub secp256k1_add_len: usize, pub secp256k1_double_len: usize, + pub secp256r1_add_len: usize, + pub secp256r1_double_len: usize, + pub bn254_add_len: usize, pub bn254_double_len: usize, pub bls12381_add_len: usize, @@ -149,6 +158,8 @@ impl Default for ShardingConfig { keccak_len: shard_size, secp256k1_add_len: shard_size, secp256k1_double_len: shard_size, + secp256r1_add_len: shard_size, + secp256r1_double_len: shard_size, bn254_add_len: shard_size, bn254_double_len: shard_size, bls12381_add_len: shard_size, @@ -211,6 +222,14 @@ impl MachineRecord for ExecutionRecord { "secp256k1_double_events".to_string(), self.secp256k1_double_events.len(), ); + stats.insert( + "secp256r1_add_events".to_string(), + self.secp256r1_add_events.len(), + ); + stats.insert( + "secp256r1_double_events".to_string(), + self.secp256r1_double_events.len(), + ); stats.insert("bn254_add_events".to_string(), self.bn254_add_events.len()); stats.insert( "bn254_double_events".to_string(), @@ -220,6 +239,10 @@ impl MachineRecord for ExecutionRecord { "k256_decompress_events".to_string(), self.k256_decompress_events.len(), ); + stats.insert( + "p256_decompress_events".to_string(), + self.p256_decompress_events.len(), + ); stats.insert( "blake3_compress_inner_events".to_string(), self.blake3_compress_inner_events.len(), @@ -267,11 +290,17 @@ impl MachineRecord for ExecutionRecord { .append(&mut other.secp256k1_add_events); self.secp256k1_double_events .append(&mut other.secp256k1_double_events); + self.secp256r1_add_events + .append(&mut other.secp256r1_add_events); + self.secp256r1_double_events + .append(&mut other.secp256r1_double_events); self.bn254_add_events.append(&mut other.bn254_add_events); self.bn254_double_events .append(&mut other.bn254_double_events); self.k256_decompress_events .append(&mut other.k256_decompress_events); + self.p256_decompress_events + .append(&mut other.p256_decompress_events); self.blake3_compress_inner_events .append(&mut other.blake3_compress_inner_events); self.bls12381_add_events @@ -452,6 +481,26 @@ impl MachineRecord for ExecutionRecord { .extend_from_slice(secp256k1_double_chunk); } + // secp256r1 curve add events. + for (secp256r1_add_chunk, shard) in take(&mut self.secp256r1_add_events) + .chunks_mut(config.secp256r1_add_len) + .zip(shards.iter_mut()) + { + shard + .secp256r1_add_events + .extend_from_slice(secp256r1_add_chunk); + } + + // secp256r1 curve double events. + for (secp256r1_double_chunk, shard) in take(&mut self.secp256r1_double_events) + .chunks_mut(config.secp256r1_double_len) + .zip(shards.iter_mut()) + { + shard + .secp256r1_double_events + .extend_from_slice(secp256r1_double_chunk); + } + // bn254 curve add events. for (bn254_add_chunk, shard) in take(&mut self.bn254_add_events) .chunks_mut(config.bn254_add_len) @@ -508,6 +557,9 @@ impl MachineRecord for ExecutionRecord { // K256 curve decompress events. first.k256_decompress_events = std::mem::take(&mut self.k256_decompress_events); + // P256 curve decompress events. + first.p256_decompress_events = std::mem::take(&mut self.p256_decompress_events); + // Blake3 compress events . first.blake3_compress_inner_events = std::mem::take(&mut self.blake3_compress_inner_events); diff --git a/core/src/runtime/syscall.rs b/core/src/runtime/syscall.rs index 4e6304b429..37b9ccee79 100644 --- a/core/src/runtime/syscall.rs +++ b/core/src/runtime/syscall.rs @@ -18,8 +18,9 @@ use crate::syscall::{ SyscallHalt, SyscallHintLen, SyscallHintRead, SyscallVerifySP1Proof, SyscallWrite, }; use crate::utils::ec::edwards::ed25519::{Ed25519, Ed25519Parameters}; -use crate::utils::ec::weierstrass::bls12_381::Bls12381; -use crate::utils::ec::weierstrass::{bn254::Bn254, secp256k1::Secp256k1}; +use crate::utils::ec::weierstrass::{ + bls12_381::Bls12381, bn254::Bn254, secp256k1::Secp256k1, secp256r1::Secp256r1, +}; use crate::{runtime::ExecutionRecord, runtime::MemoryReadRecord, runtime::MemoryWriteRecord}; /// A system call is invoked by the the `ecall` instruction with a specific value in register t0. @@ -102,6 +103,15 @@ pub enum SyscallCode { /// Executes the `BLS12381_DOUBLE` precompile. BLS12381_DOUBLE = 0x00_00_01_1F, + + /// Executes the `SECP256R1_ADD` precompile. + SECP256R1_ADD = 0x00_01_01_10, + + /// Executes the `SECP256R1_DOUBLE` precompile. + SECP256R1_DOUBLE = 0x00_00_01_11, + + /// Executes the `SECP256R1_DECOMPRESS` precompile. + SECP256R1_DECOMPRESS = 0x00_00_01_12, } impl SyscallCode { @@ -132,6 +142,9 @@ impl SyscallCode { 0x00_00_00_F1 => SyscallCode::HINT_READ, 0x00_00_01_1D => SyscallCode::UINT256_MUL, 0x00_00_01_1C => SyscallCode::BLS12381_DECOMPRESS, + 0x00_01_01_10 => SyscallCode::SECP256R1_ADD, + 0x00_00_01_11 => SyscallCode::SECP256R1_DOUBLE, + 0x00_00_01_12 => SyscallCode::SECP256R1_DECOMPRESS, _ => panic!("invalid syscall number: {}", value), } } @@ -286,6 +299,18 @@ pub fn default_syscall_map() -> HashMap> { SyscallCode::SECP256K1_DECOMPRESS, Rc::new(WeierstrassDecompressChip::::new()), ); + syscall_map.insert( + SyscallCode::SECP256R1_ADD, + Rc::new(WeierstrassAddAssignChip::::new()), + ); + syscall_map.insert( + SyscallCode::SECP256R1_DOUBLE, + Rc::new(WeierstrassDoubleAssignChip::::new()), + ); + syscall_map.insert( + SyscallCode::SECP256R1_DECOMPRESS, + Rc::new(WeierstrassDecompressChip::::new()), + ); syscall_map.insert( SyscallCode::BN254_ADD, Rc::new(WeierstrassAddAssignChip::::new()), @@ -402,6 +427,12 @@ mod tests { SyscallCode::SECP256K1_DOUBLE => { assert_eq!(code as u32, sp1_zkvm::syscalls::SECP256K1_DOUBLE) } + SyscallCode::SECP256R1_ADD => { + assert_eq!(code as u32, sp1_zkvm::syscalls::SECP256R1_ADD) + } + SyscallCode::SECP256R1_DOUBLE => { + assert_eq!(code as u32, sp1_zkvm::syscalls::SECP256R1_DOUBLE) + } SyscallCode::BLAKE3_COMPRESS_INNER => { assert_eq!(code as u32, sp1_zkvm::syscalls::BLAKE3_COMPRESS_INNER) } @@ -414,6 +445,9 @@ mod tests { SyscallCode::SECP256K1_DECOMPRESS => { assert_eq!(code as u32, sp1_zkvm::syscalls::SECP256K1_DECOMPRESS) } + SyscallCode::SECP256R1_DECOMPRESS => { + assert_eq!(code as u32, sp1_zkvm::syscalls::SECP256R1_DECOMPRESS) + } SyscallCode::BN254_ADD => assert_eq!(code as u32, sp1_zkvm::syscalls::BN254_ADD), SyscallCode::BN254_DOUBLE => { assert_eq!(code as u32, sp1_zkvm::syscalls::BN254_DOUBLE) diff --git a/core/src/syscall/precompiles/mod.rs b/core/src/syscall/precompiles/mod.rs index f33626e7b1..46c1e6ef38 100644 --- a/core/src/syscall/precompiles/mod.rs +++ b/core/src/syscall/precompiles/mod.rs @@ -8,6 +8,7 @@ use crate::operations::field::params::{NumLimbs, NumWords}; use crate::runtime::SyscallContext; use crate::utils::ec::weierstrass::bls12_381::bls12381_decompress; use crate::utils::ec::weierstrass::secp256k1::secp256k1_decompress; +use crate::utils::ec::weierstrass::secp256r1::secp256r1_decompress; use crate::utils::ec::CurveType; use crate::utils::ec::{AffinePoint, EllipticCurve}; use crate::utils::{bytes_to_words_le_vec, words_to_bytes_le_vec}; @@ -159,6 +160,7 @@ pub fn create_ec_decompress_event( let decompress_fn = match E::CURVE_TYPE { CurveType::Secp256k1 => secp256k1_decompress::, CurveType::Bls12381 => bls12381_decompress::, + CurveType::Secp256r1 => secp256r1_decompress::, _ => panic!("Unsupported curve"), }; diff --git a/core/src/syscall/precompiles/weierstrass/weierstrass_add.rs b/core/src/syscall/precompiles/weierstrass/weierstrass_add.rs index f2282632b8..1ae7aa0995 100644 --- a/core/src/syscall/precompiles/weierstrass/weierstrass_add.rs +++ b/core/src/syscall/precompiles/weierstrass/weierstrass_add.rs @@ -80,6 +80,7 @@ impl Syscall for WeierstrassAddAssignChip { CurveType::Secp256k1 => rt.record_mut().secp256k1_add_events.push(event), CurveType::Bn254 => rt.record_mut().bn254_add_events.push(event), CurveType::Bls12381 => rt.record_mut().bls12381_add_events.push(event), + CurveType::Secp256r1 => rt.record_mut().secp256r1_add_events.push(event), _ => panic!("Unsupported curve"), } None @@ -181,6 +182,7 @@ where CurveType::Secp256k1 => "Secp256k1AddAssign".to_string(), CurveType::Bn254 => "Bn254AddAssign".to_string(), CurveType::Bls12381 => "Bls12381AddAssign".to_string(), + CurveType::Secp256r1 => "Secp256r1AddAssign".to_string(), _ => panic!("Unsupported curve"), } } @@ -194,6 +196,7 @@ where CurveType::Secp256k1 => &input.secp256k1_add_events, CurveType::Bn254 => &input.bn254_add_events, CurveType::Bls12381 => &input.bls12381_add_events, + CurveType::Secp256r1 => &input.secp256r1_add_events, _ => panic!("Unsupported curve"), }; @@ -273,6 +276,7 @@ where CurveType::Secp256k1 => !shard.secp256k1_add_events.is_empty(), CurveType::Bn254 => !shard.bn254_add_events.is_empty(), CurveType::Bls12381 => !shard.bls12381_add_events.is_empty(), + CurveType::Secp256r1 => !shard.secp256r1_add_events.is_empty(), _ => panic!("Unsupported curve"), } } @@ -432,6 +436,9 @@ where CurveType::Bls12381 => { AB::F::from_canonical_u32(SyscallCode::BLS12381_ADD.syscall_id()) } + CurveType::Secp256r1 => { + AB::F::from_canonical_u32(SyscallCode::SECP256R1_ADD.syscall_id()) + } _ => panic!("Unsupported curve"), }; @@ -455,7 +462,8 @@ mod tests { run_test, setup_logger, tests::{ BLS12381_ADD_ELF, BLS12381_DOUBLE_ELF, BLS12381_MUL_ELF, BN254_ADD_ELF, - BN254_MUL_ELF, SECP256K1_ADD_ELF, SECP256K1_MUL_ELF, + BN254_MUL_ELF, SECP256K1_ADD_ELF, SECP256K1_MUL_ELF, SECP256R1_ADD_ELF, + SECP256R1_MUL_ELF, }, }, }; @@ -508,4 +516,18 @@ mod tests { let program = Program::from(BLS12381_MUL_ELF); run_test(program).unwrap(); } + + #[test] + fn test_secp256r1_add_simple() { + setup_logger(); + let program = Program::from(SECP256R1_ADD_ELF); + run_test(program).unwrap(); + } + + #[test] + fn test_secp256r1_mul_simple() { + setup_logger(); + let program = Program::from(SECP256R1_MUL_ELF); + run_test(program).unwrap(); + } } diff --git a/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs b/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs index 04e3e125dd..6584cad757 100644 --- a/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs +++ b/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs @@ -35,6 +35,7 @@ use crate::syscall::precompiles::SyscallContext; use crate::utils::bytes_to_words_le_vec; use crate::utils::ec::weierstrass::bls12_381::bls12381_sqrt; use crate::utils::ec::weierstrass::secp256k1::secp256k1_sqrt; +use crate::utils::ec::weierstrass::secp256r1::secp256r1_sqrt; use crate::utils::ec::weierstrass::WeierstrassParameters; use crate::utils::ec::CurveType; use crate::utils::ec::EllipticCurve; @@ -77,6 +78,7 @@ impl Syscall for WeierstrassDecompressChip { match E::CURVE_TYPE { CurveType::Secp256k1 => rt.record_mut().k256_decompress_events.push(event), CurveType::Bls12381 => rt.record_mut().bls12381_decompress_events.push(event), + CurveType::Secp256r1 => rt.record_mut().p256_decompress_events.push(event), _ => panic!("Unsupported curve"), } None @@ -116,6 +118,7 @@ impl WeierstrassDecompressChip { let sqrt_fn = match E::CURVE_TYPE { CurveType::Secp256k1 => secp256k1_sqrt, CurveType::Bls12381 => bls12381_sqrt, + CurveType::Secp256r1 => secp256r1_sqrt, _ => panic!("Unsupported curve"), }; let y = cols.y.populate(record, shard, &x_3_plus_b, sqrt_fn); @@ -138,6 +141,7 @@ where match E::CURVE_TYPE { CurveType::Secp256k1 => "Secp256k1Decompress".to_string(), CurveType::Bls12381 => "Bls12381Decompress".to_string(), + CurveType::Secp256r1 => "Secp256r1Decompress".to_string(), _ => panic!("Unsupported curve"), } } @@ -150,6 +154,7 @@ where let events = match E::CURVE_TYPE { CurveType::Secp256k1 => &input.k256_decompress_events, CurveType::Bls12381 => &input.bls12381_decompress_events, + CurveType::Secp256r1 => &input.p256_decompress_events, _ => panic!("Unsupported curve"), }; @@ -211,6 +216,7 @@ where match E::CURVE_TYPE { CurveType::Secp256k1 => !shard.k256_decompress_events.is_empty(), CurveType::Bls12381 => !shard.bls12381_decompress_events.is_empty(), + CurveType::Secp256r1 => !shard.p256_decompress_events.is_empty(), _ => panic!("Unsupported curve"), } } @@ -345,6 +351,7 @@ mod tests { use crate::utils::run_test_io; use crate::utils::tests::SECP256K1_DECOMPRESS_ELF; + use crate::utils::tests::SECP256R1_DECOMPRESS_ELF; #[test] fn test_weierstrass_bls_decompress() { @@ -394,4 +401,29 @@ mod tests { assert_eq!(result, decompressed); } } + + #[test] + fn test_weierstrass_r256_decompress() { + utils::setup_logger(); + + let mut rng = thread_rng(); + + let num_tests = 10; + + for _ in 0..num_tests { + let secret_key = p256::SecretKey::random(&mut rng); + let public_key = secret_key.public_key(); + let encoded = public_key.to_encoded_point(false); + let decompressed = encoded.as_bytes(); + let compressed = public_key.to_sec1_bytes(); + + let inputs = SP1Stdin::from(&compressed); + + let mut public_values = + run_test_io(Program::from(SECP256R1_DECOMPRESS_ELF), inputs).unwrap(); + let mut result = [0; 65]; + public_values.read_slice(&mut result); + assert_eq!(result, decompressed); + } + } } diff --git a/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs b/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs index 2730c4924e..9371da8dd1 100644 --- a/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs +++ b/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs @@ -486,7 +486,9 @@ pub mod tests { runtime::Program, utils::{ run_test, setup_logger, - tests::{BLS12381_DOUBLE_ELF, BN254_DOUBLE_ELF, SECP256K1_DOUBLE_ELF}, + tests::{ + BLS12381_DOUBLE_ELF, BN254_DOUBLE_ELF, SECP256K1_DOUBLE_ELF, SECP256R1_DOUBLE_ELF, + }, }, }; @@ -510,4 +512,11 @@ pub mod tests { let program = Program::from(BLS12381_DOUBLE_ELF); run_test(program).unwrap(); } + + #[test] + fn test_secp256r1_double_simple() { + setup_logger(); + let program = Program::from(SECP256R1_DOUBLE_ELF); + run_test(program).unwrap(); + } } diff --git a/core/src/utils/ec/mod.rs b/core/src/utils/ec/mod.rs index 6ec4ad0327..6818dd94c1 100644 --- a/core/src/utils/ec/mod.rs +++ b/core/src/utils/ec/mod.rs @@ -28,6 +28,7 @@ pub enum CurveType { Bn254, Ed25519, Bls12381, + Secp256r1, } impl Display for CurveType { @@ -37,6 +38,7 @@ impl Display for CurveType { CurveType::Bn254 => write!(f, "Bn254"), CurveType::Ed25519 => write!(f, "Ed25519"), CurveType::Bls12381 => write!(f, "Bls12381"), + CurveType::Secp256r1 => write!(f, "Secp256r1"), } } } diff --git a/core/src/utils/ec/weierstrass/mod.rs b/core/src/utils/ec/weierstrass/mod.rs index 5ab6f47ae5..d685d58cb0 100644 --- a/core/src/utils/ec/weierstrass/mod.rs +++ b/core/src/utils/ec/weierstrass/mod.rs @@ -11,6 +11,7 @@ use crate::utils::ec::{AffinePoint, EllipticCurve, EllipticCurveParameters}; pub mod bls12_381; pub mod bn254; pub mod secp256k1; +pub mod secp256r1; /// Parameters that specify a short Weierstrass curve : y^2 = x^3 + ax + b. pub trait WeierstrassParameters: EllipticCurveParameters { diff --git a/core/src/utils/ec/weierstrass/secp256r1.rs b/core/src/utils/ec/weierstrass/secp256r1.rs new file mode 100644 index 0000000000..0cf80854eb --- /dev/null +++ b/core/src/utils/ec/weierstrass/secp256r1.rs @@ -0,0 +1,156 @@ +//! Modulo defining the Secp256r1 curve and its base field. The constants are all taken from +//! https://www.secg.org/SEC2-Ver-1.0.pdf (secp256r1). + +use std::str::FromStr; + +use elliptic_curve::sec1::ToEncodedPoint; +use elliptic_curve::subtle::Choice; +use generic_array::GenericArray; +use num::traits::FromBytes; +use num::traits::ToBytes; +use num::BigUint; +use p256::elliptic_curve::point::DecompressPoint; +use p256::FieldElement; +use serde::{Deserialize, Serialize}; +use typenum::{U32, U62}; + +use super::{SwCurve, WeierstrassParameters}; +use crate::operations::field::params::FieldParameters; +use crate::operations::field::params::NumLimbs; +use crate::utils::ec::AffinePoint; +use crate::utils::ec::CurveType; +use crate::utils::ec::EllipticCurve; +use crate::utils::ec::EllipticCurveParameters; + +#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] +/// Secp256r1 curve parameter +pub struct Secp256r1Parameters; + +pub type Secp256r1 = SwCurve; + +#[derive(Debug, Default, Clone, Copy, PartialEq, Serialize, Deserialize)] +/// Secp256r1 base field parameter +pub struct Secp256r1BaseField; + +impl FieldParameters for Secp256r1BaseField { + const MODULUS: &'static [u8] = &[ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, + ]; + + /// A rough witness-offset estimate given the size of the limbs and the size of the field. + const WITNESS_OFFSET: usize = 1usize << 14; + + fn modulus() -> BigUint { + BigUint::from_bytes_le(Self::MODULUS) + } +} + +impl NumLimbs for Secp256r1BaseField { + type Limbs = U32; + type Witness = U62; +} + +impl EllipticCurveParameters for Secp256r1Parameters { + type BaseField = Secp256r1BaseField; + const CURVE_TYPE: CurveType = CurveType::Secp256r1; +} + +impl WeierstrassParameters for Secp256r1Parameters { + const A: GenericArray = GenericArray::from_array([ + 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 255, 255, 255, 255, + ]); + + const B: GenericArray = GenericArray::from_array([ + 75, 96, 210, 39, 62, 60, 206, 59, 246, 176, 83, 204, 176, 6, 29, 101, 188, 134, 152, 118, + 85, 189, 235, 179, 231, 147, 58, 170, 216, 53, 198, 90, + ]); + fn generator() -> (BigUint, BigUint) { + let x = BigUint::from_str( + "48439561293906451759052585252797914202762949526041747995844080717082404635286", + ) + .unwrap(); + let y = BigUint::from_str( + "36134250956749795798585127919587881956611106672985015071877198253568414405109", + ) + .unwrap(); + (x, y) + } + + fn prime_group_order() -> num::BigUint { + BigUint::from_slice(&[ + 0xFC632551, 0xF3B9CAC2, 0xA7179E84, 0xBCE6FAAD, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, + 0xFFFFFFFF, + ]) + } + + fn a_int() -> BigUint { + BigUint::from_slice(&[ + 0xFC632551, 0xF3B9CAC2, 0xA7179E84, 0xBCE6FAAD, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, + 0xFFFFFFFF, + ]) + } + + fn b_int() -> BigUint { + BigUint::from_slice(&[ + 0x27D2604B, 0x3BCE3C3E, 0xCC53B0F6, 0x651D06B0, 0x769886BC, 0xB3EBBD55, 0xAA3A93E7, + 0x5AC635D8, + ]) + } +} + +pub fn secp256r1_decompress(bytes_be: &[u8], sign: u32) -> AffinePoint { + let computed_point = + p256::AffinePoint::decompress(bytes_be.into(), Choice::from(sign as u8)).unwrap(); + let point = computed_point.to_encoded_point(false); + + let x = BigUint::from_bytes_be(point.x().unwrap()); + let y = BigUint::from_bytes_be(point.y().unwrap()); + AffinePoint::::new(x, y) +} + +pub fn secp256r1_sqrt(n: &BigUint) -> BigUint { + let be_bytes = n.to_be_bytes(); + let mut bytes = [0_u8; 32]; + bytes[32 - be_bytes.len()..].copy_from_slice(&be_bytes); + let fe = FieldElement::from_bytes(&bytes.into()).unwrap(); + let result_bytes = fe.sqrt().unwrap().to_bytes(); // TODO: might have to normalize? + BigUint::from_be_bytes(&result_bytes as &[u8]) +} + +#[cfg(test)] +mod tests { + + use super::*; + use crate::utils::ec::utils::biguint_from_limbs; + use num::bigint::RandBigInt; + use rand::thread_rng; + + #[test] + fn test_weierstrass_biguint_scalar_mul() { + assert_eq!( + biguint_from_limbs(Secp256r1BaseField::MODULUS), + Secp256r1BaseField::modulus() + ); + } + + #[test] + fn test_secp256r_sqrt() { + let mut rng = thread_rng(); + for _ in 0..10 { + // Check that sqrt(x^2)^2 == x^2 + // We use x^2 since not all field elements have a square root + let x = rng.gen_biguint(256) % Secp256r1BaseField::modulus(); + let x_2 = (&x * &x) % Secp256r1BaseField::modulus(); + let sqrt = secp256r1_sqrt(&x_2); + + println!("sqrt: {}", sqrt); + + let sqrt_2 = (&sqrt * &sqrt) % Secp256r1BaseField::modulus(); + + assert_eq!(sqrt_2, x_2); + } + } +} diff --git a/core/src/utils/programs.rs b/core/src/utils/programs.rs index 839a55b37a..d841623c35 100644 --- a/core/src/utils/programs.rs +++ b/core/src/utils/programs.rs @@ -64,6 +64,15 @@ pub mod tests { pub const SECP256K1_DOUBLE_ELF: &[u8] = include_bytes!("../../../tests/secp256k1-double/elf/riscv32im-succinct-zkvm-elf"); + pub const SECP256R1_ADD_ELF: &[u8] = + include_bytes!("../../../tests/secp256r1-add/elf/riscv32im-succinct-zkvm-elf"); + + pub const SECP256R1_DECOMPRESS_ELF: &[u8] = + include_bytes!("../../../tests/secp256r1-decompress/elf/riscv32im-succinct-zkvm-elf"); + + pub const SECP256R1_DOUBLE_ELF: &[u8] = + include_bytes!("../../../tests/secp256r1-double/elf/riscv32im-succinct-zkvm-elf"); + pub const SHA_COMPRESS_ELF: &[u8] = include_bytes!("../../../tests/sha-compress/elf/riscv32im-succinct-zkvm-elf"); @@ -85,6 +94,9 @@ pub mod tests { pub const SECP256K1_MUL_ELF: &[u8] = include_bytes!("../../../tests/secp256k1-mul/elf/riscv32im-succinct-zkvm-elf"); + pub const SECP256R1_MUL_ELF: &[u8] = + include_bytes!("../../../tests/secp256r1-mul/elf/riscv32im-succinct-zkvm-elf"); + pub const BLS12381_ADD_ELF: &[u8] = include_bytes!("../../../tests/bls12381-add/elf/riscv32im-succinct-zkvm-elf"); diff --git a/tests/secp256k1-add/Cargo.lock b/tests/secp256k1-add/Cargo.lock index ee47acbf5e..5fa7f89fe4 100644 --- a/tests/secp256k1-add/Cargo.lock +++ b/tests/secp256k1-add/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "anyhow" -version = "1.0.81" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "arrayvec" @@ -118,6 +118,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", + "pem-rfc7468", "zeroize", ] @@ -170,6 +171,7 @@ dependencies = [ "ff", "generic-array", "group", + "pem-rfc7468", "pkcs8", "rand_core", "sec1", @@ -214,9 +216,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -298,9 +300,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.153" +version = "0.2.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" [[package]] name = "libm" @@ -316,9 +318,9 @@ checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "num" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ "num-bigint", "num-complex", @@ -330,20 +332,19 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-complex" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] @@ -359,9 +360,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", @@ -370,11 +371,10 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "autocfg", "num-bigint", "num-integer", "num-traits", @@ -382,9 +382,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -395,6 +395,18 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + [[package]] name = "parity-scale-codec" version = "3.6.9" @@ -419,6 +431,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -435,6 +456,15 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -568,18 +598,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.197" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", @@ -628,6 +658,7 @@ dependencies = [ "hex", "k256", "num", + "p256", "rand", "serde", "snowbridge-amcl", diff --git a/tests/secp256r1-add/Cargo.lock b/tests/secp256r1-add/Cargo.lock new file mode 100644 index 0000000000..5daec6649a --- /dev/null +++ b/tests/secp256r1-add/Cargo.lock @@ -0,0 +1,779 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pem-rfc7468", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "tap", + "zeroize", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", +] + +[[package]] +name = "libc" +version = "0.2.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +dependencies = [ + "arrayvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "scale-info" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +dependencies = [ + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256r1-add-test" +version = "0.1.0" +dependencies = [ + "hex-literal", + "num", + "sp1-zkvm", +] + +[[package]] +name = "serde" +version = "1.0.201" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.201" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.63", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "snowbridge-amcl" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" +dependencies = [ + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "sp1-precompiles" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "cfg-if", + "getrandom", + "hex", + "k256", + "num", + "p256", + "rand", + "serde", + "snowbridge-amcl", +] + +[[package]] +name = "sp1-zkvm" +version = "0.1.0" +dependencies = [ + "bincode", + "cfg-if", + "getrandom", + "k256", + "libm", + "once_cell", + "rand", + "serde", + "sha2", + "sp1-precompiles", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf5be731623ca1a1fb7d8be6f261a3be6d3e2337b8a1f97be944d020c8fcb704" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/tests/secp256r1-add/Cargo.toml b/tests/secp256r1-add/Cargo.toml new file mode 100644 index 0000000000..d1b6104019 --- /dev/null +++ b/tests/secp256r1-add/Cargo.toml @@ -0,0 +1,10 @@ +[workspace] +[package] +version = "0.1.0" +name = "secp256r1-add-test" +edition = "2021" + +[dependencies] +sp1-zkvm = { path = "../../zkvm/entrypoint" } +hex-literal = "0.4.1" +num = { version = "0.4.1", default-features = false } \ No newline at end of file diff --git a/tests/secp256r1-add/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-add/elf/riscv32im-succinct-zkvm-elf new file mode 100755 index 0000000000000000000000000000000000000000..607176f915c1f8ef268ddee4437f94c5b13c9f6d GIT binary patch literal 117088 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 s@DCr;fQ&)t9KMHheEUZ~go7qf`R6aWAK literal 0 HcmV?d00001 diff --git a/tests/secp256r1-add/src/main.rs b/tests/secp256r1-add/src/main.rs new file mode 100644 index 0000000000..4c7ed3cebf --- /dev/null +++ b/tests/secp256r1-add/src/main.rs @@ -0,0 +1,46 @@ +#![no_main] +sp1_zkvm::entrypoint!(main); + +extern "C" { + fn syscall_secp256r1_add(p: *mut u32, q: *const u32); +} + +pub fn main() { + // generator. + // 48439561293906451759052585252797914202762949526041747995844080717082404635286 + // 36134250956749795798585127919587881956611106672985015071877198253568414405109 + let mut a: [u8; 64] = [ + 150, 194, 152, 216, 69, 57, 161, 244, 160, 51, 235, 45, 129, 125, 3, 119, 242, 64, 164, 99, + 229, 230, 188, 248, 71, 66, 44, 225, 242, 209, 23, 107, 245, 81, 191, 55, 104, 64, 182, + 203, 206, 94, 49, 107, 87, 51, 206, 43, 22, 158, 15, 124, 74, 235, 231, 142, 155, 127, 26, + 254, 226, 66, 227, 79, + ]; + + // 2 * generator. + // 56515219790691171413109057904011688695424810155802929973526481321309856242040 + // 3377031843712258259223711451491452598088675519751548567112458094635497583569 + let b: [u8; 64] = [ + 120, 153, 102, 71, 252, 72, 11, 166, 53, 27, 242, 119, 226, 105, 137, 192, 195, 26, 181, 4, + 3, 56, 82, 138, 126, 79, 3, 141, 24, 123, 242, 124, 209, 115, 120, 34, 157, 183, 4, 158, + 41, 130, 233, 60, 230, 173, 125, 186, 219, 48, 116, 159, 198, 154, 61, 41, 64, 208, 142, + 219, 16, 85, 119, 7, + ]; + + unsafe { + syscall_secp256r1_add(a.as_mut_ptr() as *mut u32, b.as_ptr() as *const u32); + } + + // 3 * generator. + // 42877656971275811310262564894490210024759287182177196162425349131675946712428 + // 61154801112014214504178281461992570017247172004704277041681093927569603776562 + let c: [u8; 64] = [ + 108, 253, 231, 198, 27, 102, 65, 251, 133, 169, 173, 239, 33, 183, 198, 230, 101, 241, 75, + 29, 149, 239, 247, 200, 68, 10, 51, 166, 209, 228, 203, 94, 50, 80, 125, 162, 39, 177, 121, + 154, 61, 184, 79, 56, 54, 176, 42, 216, 236, 162, 100, 26, 206, 6, 75, 55, 126, 255, 152, + 73, 12, 100, 52, 135, + ]; + + assert_eq!(a, c); + + println!("done"); +} diff --git a/tests/secp256r1-decompress/Cargo.lock b/tests/secp256r1-decompress/Cargo.lock new file mode 100644 index 0000000000..5709875724 --- /dev/null +++ b/tests/secp256r1-decompress/Cargo.lock @@ -0,0 +1,771 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pem-rfc7468", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "tap", + "zeroize", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", +] + +[[package]] +name = "libc" +version = "0.2.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +dependencies = [ + "arrayvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "scale-info" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +dependencies = [ + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256r1-decompress-test" +version = "0.1.0" +dependencies = [ + "sp1-zkvm", +] + +[[package]] +name = "serde" +version = "1.0.201" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.201" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.63", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "snowbridge-amcl" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" +dependencies = [ + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "sp1-precompiles" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "cfg-if", + "getrandom", + "hex", + "k256", + "num", + "p256", + "rand", + "serde", + "snowbridge-amcl", +] + +[[package]] +name = "sp1-zkvm" +version = "0.1.0" +dependencies = [ + "bincode", + "cfg-if", + "getrandom", + "k256", + "libm", + "once_cell", + "rand", + "serde", + "sha2", + "sp1-precompiles", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf5be731623ca1a1fb7d8be6f261a3be6d3e2337b8a1f97be944d020c8fcb704" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/tests/secp256r1-decompress/Cargo.toml b/tests/secp256r1-decompress/Cargo.toml new file mode 100644 index 0000000000..07e589d6dc --- /dev/null +++ b/tests/secp256r1-decompress/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] +[package] +version = "0.1.0" +name = "secp256r1-decompress-test" +edition = "2021" + +[dependencies] +sp1-zkvm = { path = "../../zkvm/entrypoint" } \ No newline at end of file diff --git a/tests/secp256r1-decompress/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-decompress/elf/riscv32im-succinct-zkvm-elf new file mode 100755 index 0000000000000000000000000000000000000000..23a72610479f9a8a2f3d58bc628736beb54930a8 GIT binary patch literal 102560 zcmeFa3wRaPx%joV(8HS-!e<8JB$z8?pTy-YbhDCnanJQOB)fknj zGE{`;Qg$Xa<^T8mmj7_@e*~KRGSmPr@-OA8pFH6&P5yKB|3@2@l7CB{r^=t@_sf*? zf6p+b|GT%p=XX5&j57YmP<0>wf|s%3Vx}1lmQs2E~*OAf@{FHxzuW>t4 z^v_@aq`*HZ@J|Z-lLG&w!2c&HV6JU4%sflEb0bFl{)n>YMndty5tZX9HAiiFG{=>z zd0WnExh59Oso=`LZ5W4R<4;ntag{1I_FfemGs1}Ff59+Mu~cGIQrVWFmOiA^-in6* zh~E(o6}IFmJ8Zr0rVmoFQ6mf~cdbfgN5X396H>2eq&xqkPJ3axYFiQhRJYg9)t3^v zjfOd@(nyRd2EJh=PHB|>LjfKgvHX)VVxuZEY^yl56#KuoLVe%NYYe$ozfini-AFU9 zIAl%)uaZ1vPRde=Nd?NBT%z2Xr1ILEl)EHi*g4gPH+wtx8&z!NlhiGvZYg!kshd1; z-BD7vmbx|6t)njRP6Rh!>b6t2g}NQowTu(i9V2z~4DdC;*8txW*Bz_zrEV#8%c+|@ zaouqmU+UISw~o3^C$2kQ<4fHZ>UJ1ri52RBZ&uQ9%373DR;OaQt3uE}Y)2GySIVD< zq7bxap7FWzD^()D5!$ZenPJ36HHKpOuY}C}Vk0(2o-x1qjYe#2BhQRbY}~3)Z2T+0 z%msF1IG(l!o;pLt2d>FvUir;jBa!ge*|t@rVxd(L+qx*?@*Et(e*X>W)Z8Sqap;U6>WjZmT#Tn4U+#B!dDnAxjBiD{J~Gv`~O#Ps4&EW0rh%X%de8}LRX zW`7W|vnVzMEo}AhXsXO0NZrD<(zTBXFFn0^xbW6pR6^dUu%CN)f%1)*$HyQS2 zR?At#et8B>Pbi-`360A|f=hr;C-SP?YD>nd`*yA5#~O!d(*{Qh(1UwGH2qfh6GFT2ptE)Rd|-t>`a zPrFh%^J`T+BcgF)UU!@8szQl%n?rW8N;zrG$|>BZoa((QwkBf6*6vB^yt9Kbyy;rZ zQ5AaC$A70hkExnH$D1c}EVK@EX}|~Jdg0fqWG~^@fLEsquel-BSJO5b(sSvC`ssU_ z7jsgFnV4ju)7s6%JX6ZcDNj;fMtO~jg(>evd6@EEQeH}V zE#)PY*QuCAc?RVc zD7U1%hVnAXla!Ymv0jviDepyjSjx*OPf}h+d5savq}-%DlX6qaODV6VyoB;PBi5Vp z5aqoo4@r3er~95JcDwJ z@(d|2puCClJj!_%p*)@P2*1;%Jd5&n$}P$}m|M!zD34N}Cgnma3wzlfV*Ky{yA5b2lJe~50l-E&SLU}FarSJje7Uda~TT)&_c^TzN%FE#c%EOfR zqC70+<&-BWFQdE$KA_yBJd<)$%1bG)rM!glI{1L{5aqoo4@r3eDt-j{OK9@4ttL_Xzeu?3sbe4ldDp90_Vpy(YpQq$j#pm&nk zq$D=X)pjE;@X$}k^)(ZtEM=b3-Pcr)#52=F_MlUIn-*^B?=GB(?!6bC+s)s6Nc)>V zu+v}Ybm!x54omOuZ{Bx2J(<#xTtCBph442+v61(NV!0#C*!V9Pv2pk@V=uy&`IeD* z#4_TyXY_IBW0S++_(+NJW?pK>Z@$zJUr79w>y=8kTXq`pVOFNS{1g>GKRwg#Riw+} zDqZV-v!v#?E_KCT_`Xg>Wjti{iQj)sFLPa3`&D+N2-;aHF*!$>Q=-aUTCKdjQNx@v zS|z3wDmyw^*%>c(+5^)Jci95N*_UQ`a}KH4LkFO97XHa3)%Lv?KaJ(C!FM?mzw9Zo z=OKKgP-0YZ2!A_-zinVAjKtVt!#ve6pn)m#;@b=BB;Q^%*{*eu5!j3O#a=AEN7MNc z?Wc%Mv6}uYb@7P~>o(O*rtcGd5ZL;Pho!F2$CWYb_6?8f_F~8Lnttn6b#%tF@maLJ zPVV*QwkW$k8ynkFWJeEndgb-XN!BU{{atUVOc`VR=8gOwp<<6Uy(W13v{aVv%P_P* zVpqX;miSP)DOzK{`=x&Sb(uTOkHIx(e`hCt*1UiYg95*-UEn72N>uzV<~|R&HF@|W zMar*l&Ix$>1Nf*9eAEX%>H{D3g^zl}N4?>r-tbZHSpE&YDeo<~n`^Dzu}7?3vGvxj zcz=8YO;2mErejr8?h#w9cIt7#cWx5@BR#c3WIrw#zuYt-|*;u)x(KAp0y_7J+7AZ zzB6~Na$A!+2JjBl5=T}kb2RZzP15k%TXbw`PpekC-n44J-dyNKy~OBBm5MpVFLhgy z+XHKrEi~Sz-ANx3q|G>S|c&fdLB;!}J20_DsD#&l$vc*C2wUdw!9401VeftGEl z>uz75Jb|%;XXpdx(0b-|fl7=l?x6?l9k(mzW?<~N-EgiNXn2PnR_F<3#wrc>zS|9N zUw^GL+!+bw0mHpG!Lu34``&6rxk|(u4cq3~tf@-sx?8FD;ls+_#dQU-gVT|6>A(9u{r9++{=1jce~)|Vzk50T zcioG93hTan9n&Q3xX;&d&^f=D`20!cq_HcWv#pXmY2#K|V|3eU>l9zl zlM~W9T}_ns#5jFKA9xY?K6-{)efP%0@o(7_j`)$xtlxPj*h;CQDh;S)6Yw`hhh(HBv#t2V&m%%$7dZ# zi#<$!XAS>j>kk79yUp|22O_bxJX_EIBm6(g|H%5ou~GczQ}5s;El)t zE2hD-3$Q`_b|VAvr_i&J1B|Iqc?C}>=j;Y#&@$ZW9Of&k>;)0kwk+*ax8p1ozun4o zqbd}??!ZVFTE?q7`n%Cwo_7p(qy1F;zK)TJ(NPtv!0xwHtJM|YwIgb{$+J|flKfYs zwbPBD^P|cz*H7vcUGIv%c(|(5+bjM;ht@gvGGu=J=1%QHJlp|{+tCx$TNlA*gpAl4 z%MhL8E<^9(YsA)qZ<1$`NGCKf+GaI>VppHliT^W5=Pas`LGW+8&-w@+G~(B847t|( z=*K9!Z?Z~^sYYit)Bgcz907hdFsDIxa81E{r|DC-yh_CvLBG5xZ6{M-=7h0URZ+KE zx#g3DM%hv>W#adUZv-A$(wCde*0j;|)^x~C(Lq56<0v{P=wKX02lOHJdeQ-13g4WN z4%yJ5A}uv9_73n&=Bw2eG9P<_`REtm!Cc|P^~591u$P67!Xw0dP_G9b;`?C(PKZZ7 zbHhB8lLNlbO4GDlX7$rFTVRC}7Br3GU#5+QMjOHJfJ#_}KHoq?w|bIVT`4q$j^+6( zzD!_ctN0R2#{;SM($;Z*`Zcyy zK0CH%jVi30^9$Q5-4|QS?~d!fY+HGSvGwx%!dly^of> zNXcn-xq8NR+*nTHBp;4?&E>ak6)5|brp`i3Re)1x{F*#VeEuFWk>BqVlBbls zWYB(lESETDt`J;Z^M~=osOQz?VcXH{R-Rb-e&H9j^EU$uxZ+tn9DqJ>U|2cKA1^;@Zxv!-1}tw zu{8WAo@G}cL9%!Ua4)8Mz%O7|Pm=6L!v#{iu_iU@|X5eQQ z);9L#_v^stcP4!`4F!HiVZqy{F|N(P&nQgZbUwU$KJYUN>z?>Jb$$Z;jKZ3a=kol= zz|SZwJ!cubo(24j!lo~*x2=}hz|SbmGoN5wKLkE-W)Ex?Zyc0Btq{oVom zNMYGv@UOcP_>sbzuRTZHQ4jn`Vd=Haz#k0!aAC)NuOOe5zz-K%%UkJd7VyJ`1${mO z<_zG63u~{Dymu7%;lidhgP`+Czz-Le7Y+me2H^913gc?J3Ha1`;!N893izSItfBBv z!LNWHDy-Xa0d!sieDuPD=!K3ozz-FckH3mK#M1mu-hC6}8V~$XVOj0X)Hw_IJl`@O z+$w=jexvy=`ppGC@zk^T0J9VL=%D{t!+2i;zACK!_!($^F7Q=h@&@K8?{46;=J@2$ z*w|MF#m2ocC^o)vP;Ar?7@Ky0uS+Ji&kDMT3sCZ|&B8 zbI8;E-;i^peU{m+f7AOD?Z-UX4gYCoxBgA1o&HCz8hWICjc)J#QQF-*$fsk{?AE^- z&|bsQ?Z>VfEbUV~5gXGu*lxLwd47!8wHCkm8D%fI-0;eXDN5?NUt!owZdIv!uPJJH z9W92})S*254aq~%Z$HPXW8J1y*`=o|H|sqgR_Si|@7yD>O0S2P9zO!B{9VJ@yvcCp z?lHUrTqm_E$6CujypTp*FzqVkX0O-0>rQ)`T)_;zel7LfY0Fs8zFFrB z)$r!-ko*L{_Yf1!A#U0(_x-#o?yJZ_Ov?jKyM|*=hre?Q{JaD8?dfHPn^Q}UXs^=k zCxhR-cIB1SD=)c`|0d<7%_TnqUP}VJTET0nkC!+e1Dhhd5!* zQuzNZ=C889lzWqQFyqUNbopa9!%->P!OH?clo9 z$5rl~$<#XtuJgD~KB$Nl`G=l~&4xQI4i2k>F?)=8YS)-G&i{508VT-uiGN(f?SCWr z)eph#K!7{`{dMmsuQ|=|=I!SS58VEe;Z=V~yT-m=HT0_94sG+5+n>4Ivy~hQb7Y@I zeuSLK=4sr|He7qHO5JfOGV9NaABx(}1n*{|Gf|E27e z7aLyuHu{~X@l0G$2+hzb6Gj{M?)waT@%NN-{ac3DOk0=SOxrfY`Oc4&H^DZ%{lMO2 z!%xgt+Rf6wuamYQpnA!aZQcN@BDCHT^hGv#Lboo(1F!8f?~CTs-PxyreX z>!vmh%Sk(=yu>JRZNd!^bP(WAGN) z*0@frC)a=P03Yvl;El{JzS*aBQwneRdd{EGyKf9|OmJ;xz7Il|=IPLQKX8lyZ~7>O zpKWBX3>r;s0dM#@em(t_abE`B@N;nQOxU5E8_S?K*9mQgmn=j6I+U}pS=rOBhKDzx z7nptt7hK0aU5A9Cp4hg|J>PPtpb+bz(!KxYzsy%oG&czD)S`iF#rQpu> zIdX%MY5c?2RokI4ec!hhzW$JQ8-X*;&nZGHP2&p-$-8`D>)&4;9kRDAfd}C^p$U8- zxk&HL50TxOLht^b39erqM1S=ATz_P8s=(>v-TtN?gL`p4wArKku&1_ad34(1)SU&r zXKQ&(-8-A0{f)D=JUSC@L=M6I&JUHdAZobN;gkOGiQs)Pd}6~Vj92DZa5X2-V;{>K z*@=``!$28EJS6W&o$SkGBB1gxB2} zr_$dabY9lI__y@;uYP}9X3+n)$;JLu)7#_T`zrGIz01IzE8`MaUg8i}q73TYqYrph&+j(o*Xg2@yEP8%)jr-L8(;kuIb?X|My`T)HP7x`hfS>m?=t$X z4fIJJFiU&jZC-egwYfI}y!V244Y13P!h5gb{r)rf?l<@bC-u|1`yg^Jx*I)<-tMh! zVsb5cdFZ_qdhZb)h2Adoo`de$e1LoC?LzP1-fNB<-oZaBXFpfbO~CRNuElmWf%j~D zhqde-T8qqV1m-j?qfQCAY4J}dpJm3zzA?b}?ea}`JN)g=)v#qw@H3S&dynwKQ0JOv z{D}L`VzPw(sS%?zna|92H^Ym zUh@x_yN{J~h%0muJ?OAU!s&&spZ0BZ%1;BG@(b1xF7x3`3Utckc_uP9Fd=rQd5&q% zcmO{9fpV@g@mnH+4&Mupf2zaPr{LSTh1eb+mb+sPu;Jn0-kVYY&N+s2BiAigp$BFD zpvj%(hT8(Ym;DsmgIw-_-Y)c}o!2D&3El@y=r}L|-ia;yOnV#jUJkwES8IDA>o?v$ z@E&6f@n%7js;$b|6gQmx-^O0Rn^m)g$1{b;#dj0mMC-!Y$R)ba9&{GA2UweDYh7p$ zTI<8+-r2NH>q6&at`lM!mRAMd3kwW)lxyRV@Sub#=+8c%XB9c{Qn|D?QkzAm)w?|ywWzU;f= zBN~bE#kTwUc*9-smh#?RVVL78hqzxKXShE>H~#S_(5Dptt_>V_8{P%W4fl$#h`r`| z4nE*P!`*!*IPd3rw(?#&Y&d-`z;-qn-uwZ|VI|2NUpd%Ww8e1DO@=wXaR|6&>H9@5 z8Sb!7tlC^i1#k)C->5yy=y4-K2^@U^tJ2D(DHT0xZCjSKdLh zWADOtE{0#;ecs1m*KEUG48H{T&IJdQb9l4i-Nf~R6~F?oXg&6`7GDiM&qA+AY*h-M z4};Ikp7CR=Qh0h8x+u8!68Nf3w-{deFSwR7Zyq=mXL_tHc*I$DDY9oHd#o|KQ?~;P z*^A!_ta9$>01Md*?!8T$m3JfKI?Q#`CUjjnx~>k}*n!^{M`x}M{63FyPDKwL7Cu7X zqaRkFAA)=D&Rem0*aPj0(qHwTMdmVn9aQi8bi>;9nC#12lsf=D23@?SCgut~HUK>q z+&dR+SI({Q;!Rwkljci&I`7VA^cZwn8tC8c&}oI}-^1FcbGJjM70@ZT_tG8oVqDuH zY!EnMhsQMb5}dSd-HvWu0Z!DncY)L50Ht z-ipma#b+-u5~nxzcUy@IX6ra}fV*S~dqs=^?)2{y-yL8r#>jG)BD*6S2iUuq!@bSO zR&lmH4EY^nWV@Fj``4{tJ+{(zUu7TV^7oW?<#Kdxk7tO=aH^B4&I_;AXqO8)?`>_bKPvU!u2{ptta!nybNikzv1jE_A9=_N!m!IoC`6 z1)EdN^=v6uPI!soWW0kOn}q&FUa>#mJk*QgA4Cr;_pUzBX&7{Y-prNz>N()JOXDas zabJB5d3hzv`S%sd`SCjZL0>*KeMLS8h@~=?ucirm! zr*dAR-lEOKr`g2a2Xw6LPCtu!tpO;N{@nOW<3Bq;;0WsG^5b z_ui(T>loGhi0dX7J%s#64<0v0br&P^f&+e+$h=EDn!5LT9arW9oYwhzXuw|d&>Cz6 zdT0=O0XjJ)HQb|z2BC+7d++&a$ktNm#1%R@Rt-56k$H57_yEYfAAdrp#Xg;UJp`Q= z`*f0fFa50J$$Una9%>mw`+dNAin-ds++mAk?wY{qRbt}h#Kgh9H*q_2w@f*=aFw}B zf|KZ>JEpTPQ5?u}@nH8=k>#Z#x7qIE#fEvhagsfgJj7e0uHgV-lWzWR!H;*>#nFV?b_Rceu zbK&XSpXtX`)y#p|{JwV+%YA6LeUb5*$oL>+{OwZ=cP27E7#U|jl5^gdxJSnG8*}8h znTM?1{xGpNI;VGpm@Auh2f$;da%Y}JyH?%Kd+v+0TT4!>G28j|7Y(QHO2f&#+i))) zM7;em@yHd*z5>{Tb}HvR!TU|az5;*z|GbGma;5Tq{1kPEQuouKEmz%m_(kyU?pEl8Uj$v8$$QBUp^uj1 z7X|mu%l`$P_CP1D(8-CSGejTVnPb?2?EA4fbXw`t$=65FX{Apmx%V=@ew6HgBKAJr zm;H5GAKAl!UG_Nq2Hns{8i$g0_-zjSx6a3jd*|h8;#q_~7S>~r8*R7r zCUo~=t&^~k1I4Z*iznGvpr`llMF&(4w1ao;8wy2|Z$IkymmY*CXzr7#tBbOM+Cb>oXiZ6o~ zvPpaLp2Ty~=cCGbaUZ_L6!ycM%>E1D6SKNIfWPv0ItS@huhTKBy90ZFA->0=z4#A< zi90`m=ME`*#=k(9*Zf#F*}^ADGdqInv z4QGK#Ojw*QYaD(aIuCsYA5vfPi>~As-<(RHGjx8@mHc9G?|pR-I;<4mo-2CHNt?kx zw74C3lu9Cw1>lc-qg`-@+A~ zj`%|CjXBN8wu#~0oS*o4qv{pNAFXi#uVa%hE$uo$v$8$Yfc`u(%yj-T`*jqHr@a|qIHgesEVHYAVW?q1{P6O!9mpBYHqL(Cibg576RcZaU)n4TV| zyBnReC=HxXI@x=farfO%n>ab1)zEl9`(}wbmrwQcFXRyIZP=jYH|qS0bLW)?YYu}Y zx9DuTOp#|KpMflx-)8?vWtwB!&}KjKH<~#^k27cXO!!rFKJ(@KM1jr^?wuDzhDW3G zx#Hh=)%>oW1J8N*pyUqR4d?@K+JTY>Ilx-imA`T(pi}lUM$s*jW76vz$Tj|m zy@UKb>tB*vv}OHk`NbNJGvz99x(_(Wy}<2Njy|~xoWODaEWwHOKB1El(24dt@@S84 zL8sX}Ta^6(e$CaV(hmOIS!UP|)M5wxd*_9{$Z($F{F&={SEJ|0@P8HkY(ux8?_BiV z>}}wHy?NukY;V66yjI|kv=Ofpb5ETMUo6qMCB`;p+dIF{nD5tPhJS|GzeScGT*h7i@<8O- z?4OV)LPqUxD<{LUljsHKK8AwgXIg5gZO z3>uz;{u!-hTINyv;TQOF>`Wxyi8RBzwsQImGo0{5!_KgX53`U(?8uzA;oSnm9o&K( zj}@CRg!q;|1RiVs`KtyxUxQcsTxrm1tdVl2-iJ8i&kCJ*u$V`wIiw+Yw-4ck3L-8SYDd0xB&{<@Ml zdkOGFK9T1n@|=6p$XE)Oqvg1zGbKtK{yTF4Nf#)qe$6$ZS5WPm- zj65G~1Lkzr=HC{1jylmCbTcqo^MSDkc$?@CyDWYs{3Yvkwyed9Um4sx=yqrSY-EQk zGkY};Wf&;#ai(R(GF3bI$KlJ^V$>4ZU?D9Npz@J5)1Dt?G4$vkC=#@cp$pMPq zgD(CW>KyoLT{j)mN*1HHE4 znKyw)6#oT%bf_14V}0PiG)BaK5#Pg|J|3Lj)nl@!?!s?4$4IUH*;B7$Ef8L7ivtH- zCNzW7b;vZ=2{$r6^l)_)KWT?@lfBV1KLRiE+_UjHX8aJi4{AM#FFVklTF!WDeA&k4 z*c`YO ziC^!3ow)yB#P=R55?kqgha4#9a9DSs75ya}q{;OK{9dm-tkJvM5^K1G_ zOBnWD>G1v_@*p2WzbnaOdE~AP!JP>%&o(IU-(7OMPowJx`f{x8#@V#nq1$;? zt=dkA9J?aN<4zjlO+>HHUjn`3di_Y#oAo0t$HE7jBftyfn0x2P8`!V;g(33X*@7G& z;u-#_lhzx(RT=OCbIAITwt=&^fjj(}vVq!8%mM#(K7VrWOn5i2fn0?@tI+FJz-NsQ zU!1vL>)XJo8=3cMzCI8eICTj$oa@869XZxE@J7~|1SazA+vSLFm&Kmu`?^KbrS*tz z5m?=Ii-yyT-2%?XTt&B}U8Q|&SyQ*!m!j>m)|1`rveuDD*=3$N6Tq>jU5@xRunj#m zhB56!XNnDgZiCN;kH-eO|0?(bJ`3)h7Y-o9#2=q*D`Pyhnl|>% zI{eg99}c+NJ8R&_at+5z5Ua{~UU<&8@#nojZXhQ9t>qZs=q{7>E^P9x%6$ME{)cZH?q%3s^5J%$4CQ_MN7&`li4Vz_?^}-@&LwUo zKX%O{{2q_oVY}bPcN5*c#Rkvw4ez{vHS9}?g~^xMm!3;ZJjJkI!?)fvfh*5nI1fF~ z7#9p={M#gEALK23!HA7tHQ2r)i`-TRG44CG4eate=j*s$>Npo($n#p|eeFWx<6DTm z2Y|yzI=A5NJQLhr_48s0m%8VolaS?qC$9PNYW5eMOiYZOiQh&n{uSE&&d(<;SO9Kq zz#=|=vCZ)AoI>1vGCGsG`)tFV`W13Uzw`4v;)`!V=S}@j#&t8gJcn31&f4*6=zNHM z6CO05%DxF`LEgZf;Q|L8%e_^4De$pvzAI-rE7Z zoxnqHb-}wDc<7tp-kTCNyqgCZ-i=(r$G4l!z--0Gn+=?`#EX4PHxt zGuMX``UbhVRf9a9ds95{;=1K&_HXoO-J{sj`#BZ>L)M+|+Y7v{#KhZ)BMXo0E!zrj z%DVHLQ_7G4gb54A-u`W!dBs(unb|2d~HV8o4{;S?v22dY_4`tGhE+61U^O z@{XUE`~`YtAUL6uZXOO!=u6hZvBj2LB^RLgk1gBd!`jgberFwlwPQB#sNf&SyM+R0 z%V^fZ8QX_kh3?o+FYRgkpmuEf9C8Wkf}BJ>I8FC+2|6dS6rASiT!Ld_H+kkvd6~RK zl}!D(S0a!K6Vax1oBg^$;c+km@L!zD%@=x!xOcJCp6o+|HK4t2ME4_ka6GJcD4 zcOskjTh*Cn>f9a z^8FgNyX&X;^}X;DZWtu+oV!+&Yib9&Kt;vN;pYG+4 z`F*oaD|u^o*r)K^<<$Q&^5cnco|M6$2JJMZ?+#ETo@9({*@wX+@V&#?B-BlsxW#{&!c$$H)PUEp^PzASAg zALJfBUCF!$_g-@uzBzGKCs*>X0>kOM9XZZs9diz`2Xedz{HE8VXQpdCs&Sf*91omF z&g76@SJC;m<`>x?bPzbrdM_Ea*wi|-O4^@Jd+4I|`fg}`F1lrSpx3X5=8vOW{CjW9 zGro@Mm zRc-L#%sgyiyS8UGxomsLTgd6xklAs>m476b6#2#He&A0^?6&yQdW~w!7W}3->%axj zeKXfHWqib&Uk0}=T)%=JvPpbt<=wRuJNz`ha^qmfT+NsVvR-@$S|4V;_-x|w9YM^x z8rZZzhgTFfaYlWyDBx_T$5S5uCQ-4_=4e7)XC}c!tb!_4gAFAXfWG?@O|$ zVyB0_s_WvT5Ap6oPSNf5RPtL~ogWXyr^*2y^9nqBS0T0&@Bf3ly^DA5Mt(3< zk7L1X+Fs3Gj1Bl;)EAi@gpWpjDYr#t2a%tV`^fWp?9K(~_glHY;BuaAmiG%xv6&Lb z+S^WN@4|aNtX<6ea{PxBtX<6ea$@}8-njrhaQJ1zyM^lo=jc5)?6YA%8#2ni6FZyu zt_ z&oDmp$RJ1Kn3t-T*1lTK9BU_Wr0(34y**rj1PeUQ1#J>YaLdxstk@)*Aar>~<2h)1APa-eF z(IdgV_Y(T!R&WtLBDy=eojeaX^*z8iiwE1SbHQs#fY(jvq{Vv8P3)0OcI*aK*RIevf?@8yVYK z;5ivNn`d~Fc1m6f8USbKnT&O`pVw;QI`drQIv>7Wf^N-0_qF@6aMfC!7jh!g@gw>o zE8x%m54Znk&`nBw1DybfPs2K*7hH$xxaN4%u{ptFG4dZgY~{IUr% z$RXau{^tFL$Nm`JKQNqLb69`59$G&htOGx*?8R3Y`rQIqyWYK$+}Lfz2XE>1Y3F5l zr4v5CkUD+;AbWR0vfl3Wy#kv*p0?PlS(lKPgBO;cV>nkX#LnN&J-o2|F`d7Yd*>tg z_Pl3^%f=(iTqRd<`$+!Z1TOeY<$uuQevCKsS>~Dk-abXgr}j*I);bp4mf>0k{stke8L3(+c>jL zbOCvY>^1ll{GRp{cwIuShMYtbwtU)R;_{n#C&$0{CUx>Y4l&W@1N8qYdn65Tk>3I* zhD}4Kv@@P7&?y5P_8NX9`7hQb&?y7(O@e#xwyES_wz7|eJjcgeyY_6f5Cd(-?p{ax z$FOg&vj5~6aJu}+zMV@}fYYu1-VfQgGm*KwX$A1!!Z%yS-i}6n)x1Tn++Ey`j~iwW zR135!@b|TlBXVCYW6o;*+za>KL~#13hP9fHXn%-*cy>`MxcrcDVN>_)R*7-NL)_im zFXo=HU}Fcluae)w#(Gz>|0}O@pgj}YEIBRa&z*^F9sI{YX2;<}qi2Xe-PcaTfBuv2 zKVOz-xI>5;qSg_+`|^d*i zZX?_bG1J3s4Th`LAAU+y^k0J6czTL}Z>=oE&I3IBhV0qQ^$mvd% z{TJZ$aDWrJpv4#aa5PTjf>Q4!2|h0)OP$Ewh1lwa7?;bqZuG~+ zy?6I#{13-h8V+v6D7OjCcH@g};eVgxJN(~OJD9r|Hk*E~8itMD2CfeKeHn-L<>L6p z%z1F{ycEUGZepxlFL*bAhg>9)_trAt)Pf(na9160N_{xuBkrmJPPq?+D2aDm7$3kzZc|)O&%mN?)1fW z^jR-^^iFmbSo+;nZ1PaYB96>oH8e50aVTejgo#N{c9IVhXRaD*jy6uFPQUp4T6KNH z-OnNStfjQ`ZbK6})pFWpvF6#r*=iPNwREW1_;y)`&c&YOCPo$Knx`1K>@6E^j;$P? z7+XBtJk=PUIJI$@Ij(XTI%b%8nlUVKTI0!_J1|1t)ldEF^SL!rmCpwjEW>S#*Y++n~=W zHBXtyvoP;}rsHdb)!qt=-{6zBKoz~NYzcX zi$$f~8MG@3+cnt4(iW-H*KhL{_ublbgCXrwFji|AMbOtDn`3ci>o;rQBN-1m-)iK% zQqF&95PDYJ;f0qouEmUxvqX+Mn-&`CGf9Njat4!br)gA?FYvE_fA=THqjQY2t!>Vw zkn;x3yb|fR*p>5U7YaW#9l<3Tz|^=jRDK>V@U8I6iSRku$7kgU@rlWqxA0?PLsBJb zOVA|+#rj-d_D{Ir8sFCv;8g&PGT<@J)YCjybhEec6y)nnBlhqp=A%f(D%KoBE5Q%B z>WQO_PvB^p71;@&W*;+-zj!VpXJBX=#_xz^2<>cW=cbeMe&8(D(dUB4BxJ<$-zBL! z(8>7#oNp94Y>r(B&Ci48C7jh;V99xidOTGrJQ^~j4!p@Z(&3DmHAWQp_1aZn@T@B0+)9F_$&<T{g%3D;%f~r5>(DR`an5@r zHm;I$sqc+w87Rpz;t}*FIuN-IEj>e@!<~$$Sw%8`au!W|cAfH{SJbbzRxvNnqYo#F z9e{3O&ND=JSe48Zx=}@#U(T20TtYLyIF#TV@WPy5e#RMIS4mu1xc%WqJKDTZzjuxu zt3U9h;{2uq;#b#K4f{WCRrW8*SF-n~j{hdkfP=5BiQrZd3Hsr_s~>obiQ(LF`cZ|| z_pG#|OLKHT^X!9mwD1pI{cIlbGW|5`e)7M%)2+&%)}x=n(vRpQ^meU9f6DOBl<6oG zosNCu9m*$zv!#-w1eO%^_^VeP%-RYmVs7!DjDQB(5a`_*7 zZ#cdvoRMgn&$+lyaz08w&RAL_XFUzp=kw$xUzc+u<3p_hZt{737LXk&;rx)|uzy}r zLtd(0y`?JLWJjk{&Y6&dtpTz5Va@^>0Zn}zV&m=w=M)|lpTsk)fkLNPZVl_SPYS*v z6T0iMK2*zj-}1ZC3i$C{JKRtB%H%n;YvBD#Bdq5q()6!_k86D)I6tsrs2x^*UG|_z zAA(mb7rgGEkGx{bEy&`%wxo*RV}*N^FJm69;-Jq8nG^0S&4BmM>E5<&KIdHJHb(Im zqKQ$(QS?Ka$eOQf8m1=Tqxgf^(_HimIM@L{w7q8SlJoN9Kd|TL3GbYMzJ1&Jh2?Ci zKLk2#QriIQ9hs-q%oFzQ?fQ1kXG)e-2@PX%ehl~61(v) z4xtt2vZH%b^U-jc;A7T?1Ny@QJ?TH%hg-0!UizzQs+Fr<-L&4dz6sAk`yzcl>;!@1 z*R>vi@0oLW3cR}Tu&n!2xJfZ!G>dUB$2=DXFicEp&;+Klv5+4Qr?PdNHd>=^%Z)_X(-1jNJ7WkBR z>Ss$I5+A66b`8EyiM{rpRdjamvu$AAA@oUFy_~7F*+Sl-c}4B(eETEf>lAA;=X7#r zJ@g244))mbb()OXFzg68g5O>}K6EPnh}Z*-dw{na>EiE)paHtSkv2st{!T4d#vZ8) zArlrdVIdQid5U2{r!am;7=J!&o@#_`!-$BS{8c`+KmPZ-#t$CB_}{z!{gvXUaOTrV zjHwdcd@pl7!Zgus;;RcU#|K#9!gOd-vi!GV>jl?O8>DQffkIr@3S8|c5#(fx={7MX;GjHA+o zh9)#*7mg7Yn)z~7vN^_iN_vjrQDmGsY80LZNBtW-8~HXtu@UI}^R$gDX$*8zg+ALY zkhA|=`n8;Zey_&ER_4*;O3_cpGGWod^TkdQ-*nT>oHJ-!^8=gOu=m(GFZ#{r)4Jl< z$EUUW)&Cx?i@w;C)(u}4I{$sNR?i-v))oK#kD;}C@mN|{{Ot2--B5RYS{FU_zenqe zAw6lW^8bEX7p*@&tsB;UzFw&C^>deAsHpu5^jmcT`aSf&NWbV&^y}Y^emZB8$iqjv z&kAg1NrBiByDB+ZpHHssJ>L)!zahT~-6Q7)qk~2@BFCH!+)w)h-#i}g`@V7saqUF$ zGs0%R_#Nn2YgUtZINcp^56oKSux?Kpp) zv6JsQKbG6lLqDf%b=;{Kgpg9)|X<@r4*K zdfJaG-Zk?Y@ehiLZw!1B>hgW6*vLk%jCUmC&E;%Q!OOBZN0GQCx6#0E$eI3r9^$BT zN5$_qN0oFNdxbytdvvblX7mX$Mont0UyF@Q3e2vY7;tqy%pYq-fM>5I@dNaz65?^{>aDOAG7#m-wZ*nty&m4y%uE_fF({!fTor zD;^L$gdWc|9eAAOY6QGmv^7yuDX~^sd=dFMew(8jP2n?q zrL@3TN)vqLKT!f-+=t!N_E6$R@ipL&P@O+l`N=)8F+K5*f0b_^MY6%GX%FMwlOUIc z-DOJI4`iZ>x^y@Y!TD~7PN`DoDx?fOw@1f_ zqw1g~yr*?nMR{A;+7Sy`;2`>mJXI3EPw6-%a)j5c8Gm`amCU{2k4?jFcs!BUXbN8h z=iDwy(a;WjTA%+bZV=uToglut&#TGP@&8is%hyE@YF-upZL_Q_9;X5ud`HqVz{^&6|^+buUTSPa+ zXVuX^@xY?m9{K}cR`O_neNNryuQR&yTz7qxf|uj!eE)c0|CwAru_kfjNaDua5f*3n znz3=k=_U_!dL8A4 ze0RiNdKPPula#qWNrAk@Nv}RsrktYjqwe z{$M(1YHcWrXQcPn-!;peq;sWqG84L{6StBlO=n$@JOzA8p42*QK0+=EJErrb-z?~B zpZq1|^D(x2qZ<9G4x8f3t;ZsGh(f9&SkOcj6k1#-DB6zOsI{&A;!*IlY@KyQEC z-`tSt>hV6M+A=o0?}Yj8OdhuV_XQ^<^3n0wdC6ycRcAr#R`lCbO6buxIQ?CnW9h<& z_}0hgkpQ3fg`X06hQzbNOJVF=I5Da?%-n~GElpxeGcmT7 z`gSE{yGv%1J4)HaTe{juO0JRb>iKXRddu^!{*sYYf0^~3q-!;OM|5bQBfcFE5mS{I@MT_9>jLHb1>``!D?Sf2j!HRn1I8#LK6?Z6k9-cT z3!5A8mDb=p|Y2D(Xdg$v?e$3jR)&+?_={Zk*4=63F-0BGS$oB<(`dc@+%$NQ?VU&3|L+kZx zPdE>MX>Cs1g`yk&f3Y^_=VgBLdFx@RITxN1xzcNMnnn%R{zKR1G%jk(=i!2$5WD01 z#K+V@fT8D}sATk)p zKWC)(gwd`2F}WpjxY*ueZ0|*;hFK-w?^LQj9eca*-O9UpT38RjWX+$Zs8lAUd7>CgrGVGs1$r%#U}ZS#_6V)KIjBj*$Qu~u{4 zPHfdq%CnSv#~qzQ-?qgWzTNvh->=nn@8_)1uOZ)-7}%R~_lUiz?PiB~jy^9E{nxNso)_vEs_ACm_r#BsIC{Kq z=b+<__@AuVblJUIy2Y#+UF{zW;@KpzK$m^{?6~%gdc~) z5xs~^v9^H>jnXot*Zn1C3jD2y0$%R1N5ZLUQt_)c_8i;IOa8X8$sQCvHok%MSB*{W z`paWecmMTcYtY{UlX)bkr00maAg_>=dDC-|laN>|F+K3FPN?Gxqa*l^<>=RAp%3u? znM0%c_4s|!KCXPLT68q?D7hcae@E7t(-QgT^ZixH&wRjKkdsM@oLfJN;d}depprX9 zA8CJF^bl(v;>WT6DeH{jh`$LBicZ^Gf&T6j#3m<`Pm6QNnVripwX#iv6`KkMhvC(zF>vY^+ha&<24EB-zY`8Hya6-Pfv zf9QeKnz8#g!aG}dL}2j!qfd?}Gbw!-(94i9)q^8;*bVqc$2($=6KhMz%QO*Fvu1kN z9{G-1nDxuBU%%u|(ZhTzGt9R$v8fSa=1IKURHAcSu`$T^+G^}|QklHNpWxk3p%Hdu zv9?W`rbQd2|08XT6SQfnInst#D+TAQUw($}x=P0_9qd<0mK@M=OUuKJtSc|naZ8fD zE6J>1rs9^=*r87vc^ULvE#LGdjzga@mJGWE{iFBimHGSg!pvnyhrd5hen(RK^Q>Th z9<-7Dc~Vxxo{-dDyKe1bmbBCRc-Ws;cVvH_Zqt5bf8J3rbh}jF8U{Ad68e!h)ON7q zF_~xPxGR6d_>PTLiIHOYGS()(f6Q2sdp*`x8EYhD%ih@85%waYqv?sW=x@C z!@q)0jGP7WiQ%SWr`S_0I$y@%@^42n@T>4?HI0gX$hQqU<7w>k&~*wF=WpOUl2h}2 zsPBt?lNh9DyM~*ISHkhycA7h4(j24S1wyoQp364yn9#FHPt9 z(B=*+lA@i?FLcqa=-2EkhzLDJ4~t%ojj>cc{hDi&ze}ub`kkzq=x=pa?cv;>R`%jW z!?8!3UXMN2@;YlN*b}|J*X7&7+kQMuA8m`npZK!PT=}O0{bHkIV~D+c`}Vko=iB!$2K^tC z1NUi_{4HzFeOMDBH{VD+&}}_|wJpEjrvLJNfZVQ_5BTh@Sw-K_RIfFBKt7$dFj@af z>%RWQJ{5GYPnV*Ri4wzjGM6>y^f;k+Vs@1<2G0` zI5KXZ-X-c}M%#D$nR6@SWlRFjXHibWe+Vek{e-;(pn?3UoAekHDpd= zT)12D0jIPyHuf8;052y8d|#C%)NRdvM*fgZ#M8=z&7eETkuSLR6TCB~+6a^@s- z3jLUq^N1M=g70Ir@=d0wd~ZU(uP*0r)z7{5TDNNUG7uT@;Ej5{i_-#*-Tx*zHqnz>SBtJ>53G5L@Fslm z!=H)FMUL4M_uXLq|L8q&`nj41jBM7Hd+dqpf_cr)kX7WfO88gr+wV{P4AB?yJ{$VP zhoyJZ)r$41BDK`-?*{lcTWqA>13VHur4RP()u*Gco4W1U^Xp%y_sksgTz!ZBj@fe- z%gr<5p>Ud+C%S|+j!EK1WuO54qow-e7PftLTqB+Ox2hzASl!=`=9!+H2 zZP^=Gw-R|&$frVP_~&_SfJDP7Az&*t`>H>lH*Yl0~+VT0O;ym_r^*I_Z%{Q6hNQ!SX z&*1ZDzJXtu(-ZJY#l#bge**X(v!_(#NAt?i6t5In!ZT(*@3Q0(V-VA_Um4vie8YR{ zXJzx9@htsqhS;bL===z|K7qmB_J^r#zNMR`wLR7DpqsrTc0^s8q6WBOIs zb@ltcZXUD31OimSWz+Z7M$ef@d7tE%7gecty& zeOvslEpd3p8hoCKzCL8l0+|pV(7qFVpkp}v!mj=M-OF-(f9f6T_2>^9U?9WdKNvBE zFO~9tb-zV>|F(WBz)kzUT{!vuZhDh`d#oi$%p>`6oe#yA^Y?HO3+Z?340#vZFnO;o zfzST;yjv%+yjM`6oDS^AP)omG=bkx0`orFK^~d-tu}h7_DaC)+J9grC$+uMKi$2JQ zDWS#^=4b~x}CX9-`V=7@Ln0$W${$8P-6ErxD-;rKCh)8<%@7`o&| ztvmc2%Q*ro<$n>w{i?@z?{%JTQ*#Q3?s*I!$D)^{y~I#b#(pryhu;;M%U-aCBKfwT z%esC1n%0nKZB))i_7z7|1?N)~c^kQ(O+I31guPen|70(i6M3k}>u5^l&opoPx~$_@ z66^3D)=N6(sZPEkd$RR+?)|*PI{~c@#_~@}lXsJBc-M{MhejINfBKO4ydgWvd%1kK z+AeJ}JkCH^-M96y%QqDy{*-)=JGX;x5-GFoj~hRA)4pr5zVR78WSW!gD2nf?4c0M| zTU~rxH%CSZ=a^@m5j;zO%X-RBYBH6SVL)KZ$sFSH5JK&$(of?&tqD~z{DwGol~~0PvGxT);&sDgU{mq{_~VQ_)_+9WEgg@etPe>+pFme zb8R}YD*I>hjgXm#UafthGqHBF&e`xTYqnXNp>tnm(~I=K3cvdf@LI+DTX%GtwJ&z^ zu2?93f0?28pjaEwXC=hL?49&uK=#M^@wmu|-ouanNz`W0_WZxC?HJZL$w|?U@68vW zCpPd~>_mygf!aQhH_mhyE@X{0<1ph4we`>VkeDSZ?`&feBa;7i2hld2?;nlz<6(hi zmlkLm+3Zm<^Vv7kogR5F9-&8nV33=WIHjvk-r=y*rO!K5TmLWdp2kG>x$Aw0VK)pf z$o=;pg0`%SEIw0t;hJu=X0Fy^15)(X{37c{VjJ`tOOJdWIqYNhe8Nxu9?uiRvoUgv zvgat4`z`kS-oV)-mAngZFK3agGRTK=?gIM*c_$&YHZ8Fwdn|Zg@dd;E;Sg1yaT2)? z_UdLl5%SpgYM1k#W*TEAHy!_UgIra-BAvW5xqj9M668YMwUJNV&DpGJw7|Cq*o&0K zzKFHM$;ARd0-fuzzt8J+DiJc*If)7~}qz*7yYe=%z;Oq16dYLuw5#{9k%+t2gU$k3`m@M9{VpB8g{Z5bCnKmz+?@>t_H4- z6N_?14#?BeU$5iFi>w#uy+rJ<4JA%(G)!oh7*}kVr{Ra3hD-+e3N!Ws`C9r(!c(k! zp(l>XZTwZRlqqyTzQw0kX5!z|>G%Js?p@&Is>}QTv%A?Oh8QBtC1R`xi4Y`A=G^AY zP_PLk5Hvzc0;U?>oH=tQyRz9`XLdmci^LY)-~0KVb7sz*ot+uN&%R#&1Di9S@BR9GpYQX1zR#f^ORk~6zQA2w z=8!hn6V_>NlR9aA`;YB?ZtrXUeEGyRucuFcGfCgf>p5Yr%tsYZ_$YMyf5&;;vq}bW z>{qd=x{&V!^7rII#@>C@h5nw)_>1!HIq5afjHAf^zbAd|F!WRA*4i~rPs+x<)L%|t zwq>u8FqH4<9Va~6&|V@R-v0-^Ki@lJ_wtF?JUiJpkqH*BEJJo(^}B`FMWr}n7SM~`32hS>(Ke1{;ZF2Z2hkriT9?T(RWSH!0ws#I^?>{ z2hm@;2Kp`YLHl+0j@xJh#*yeWNqNKbf5y*^(7#8%Olo4I_ ztFA<^;22HSYxc9Rg{L`O&diu2U41=AYuIjFws&X1xb0!yKR3T`)=Tv9tl7xH=lArG zX65YT@<;USID>lv6W_2jd*TuU(Z>hL-L!xo)ZY?|GD1oy)%|A?>j6pZ?&MOCzW12Z>c9^b&h5^D_Wk>*6P80*m1&6+F&JZ z@DMx{H1Y)aE8M1>8$GYi2Hwy7sqJM&U!adZ?74j>ybWob$oQDSyxvK_M!eZCv{~Bm zdytV|af^2I74>~8b646j)(LJ(FZxJp$BAM2cHAy$bH5KgFF8a1#dhe(S6>gm1Ra`j z6TDiNcC+Zgs6FOupx?E=eh3{sY?)ln812P2jiM_vcdVrBk<4DoGVxVppxB0C-Rtgo z@BwUjt&}qZc(E(Hxa-oz8L!%JaIW*boK;CW(pRGEH#Ll-!ic}rLHfnA?;<}{|5mhV zO4|yryW@lvT|KumMoCNdX%oE{gk{)CJ9N;#a@MBq5zU<$)!~W#eKVIueDj%qsrGz3 zcjC4ta_jkWs4GIes2?L9`%cD(qK!SrhvQ|(3G_d1s?RA;7_R4w^sPDr=$pBddHJB? zYoj}nKVuE%zTW-yduN=T9{<+w%K1ZlUVK3I(uyw^c{OJeJ&doA?_Vxq;hUlPaxSc7 zS@$j50bf9#Gh~kt=Pmp6kS`{U#owha%Q=US&!->!8GM?YSqtwQmF2;w>Sf?=q&lbN z%vyBp*e^^ddkFB#>K@#3*8N!#zoRXa{mG%62U6CS_gj0uK>y#u+cG51icdDLZqoj7vk9IyjbHBQ8D(Ru`d?2hV`=DlZ#pXju zKjH7f_CATZF@MJwuYrG^qwK&;^saomPxk6jned;-enRfRq4P9Hz7N6vhJB9MERuZ= zZ7%x_=>xS7qP+BHcVj-wMAkhUI{BKOThBq4O7;g2QeKfGg|t-7ZFrHI9O>2Agu(_; z*uJT{aDKVtEs{5DRK0$*J7X=J)6?1}p?{TK65dJ{H^I8t_pX)5Oy-~1H*>VxFTFHJ z-hH!f>b~cgd%iny^{2+&#iToX_6P1+z?!ye-`Nx0oFne1ZF_b+anJr2dna~0e|R7A zL(6%w8(VqUQ|#^8JMSmU`#wJpTb02ilH*n8(<8X!7{Oe=&Kp_7bwmf9%4h z*5v+w`_^yzW@Tskm)$<2@0eb`FMnd!J;zYCtM54*`|aI*?>eSyV%D;md--kkzPJqA zPRM=;H}mI{_xu8Sb@kOxSUYcruQ-Y`L}<$FKgP!KBiN8S2>*BoZ3tbTwMX+W`&aTu zb~FqBSr6mh+jG2jJM0{Fcno3!f z9u72>`f+FDxhUP=AnU{C6LgQd9e)CJ6g!v4FaB95%Of5C*sq4Rpn7lprR;H{{C^qJ z6djoaJOF9?*R%fi!e`g%?azcBD7q}RlfpamPYKO{)DS%|7fYE`Ip0iq;&M_pRn8MA=i<1WJD&~9i5?Sns#rJRLzl~aVD1gy zB=zr|sL3<8KN+=gM{=v<7hT?Pzqk)RNcJTY?8jtJDLQ=j^iKY+@7fpt^PZ#T%$d0M z);&EZ?^JSd(PNjp5vosiu8{R1>ZhX)$T*vL?HMN8ORi_Jo%WOm4~s% zgQtq(3g02|cc2p#@lQuuGsl+i-8t5^|LC#b2=9;F@HhL1KKty~~S3QB=1-w`H*ItWVKW+blCq(`+ukR{kO&32jXEXGFqBk#iI?y9bdhoOlt9mK}+ zdWHK|9h|fd&Q{-g+xybhUH&I$u~uD$9e{^krmecIt0~Xf$hPO)(-W2lc{lm&fBB(< z{_NXk?7fP79-_RvzD8Z7ybmgQjjRQH_r7c5I@}JP@GG(L-SZ&(^&`IeE9uL=k06I& zUoCC8e||5v2|oYt6LZ-sh>m8|#`|}l{7cnl+IGh2e36f|m1`kuX?~Y^nti*nXL=Uv z-y+t*lUTbLbG|ln#*W**t;Wzq?@&^-JPXqTzx_7xmouA?9W(R zDSz`gvbRs{J%q3BS$P3`Ju*PClPGj(x5yAlW95Tg6EDKQe+J(CEj!izrp~`V@tp7} zYK%K~Nq*Gp^4eZxYWN2UAM*Ogci%E4JY{M*cf)cr2a$bEw0$)Zy)kJxDM7zaF;rLgaLk25H|s>*LJz zw|DiNa4mcn^!m-RPW%db_Z8gdboHD?TF78~PUH^aiPtjb|5ovd%HGXvXdyiE@o)VZ zbc;CHuogZ`){vg4pIMLpMQG<)P^M^m= znMcGlRLS;l{dU)mmFtjg&>!<>&JcOVj$7H!-^#weR=1tCx~Vkg!{?qr`5C(+SC#TZ zi{@hMvPs;P;l7Q$)jTD)XE+Dbk>w_P)}?{0lfSI+Z-xg9;8+poc1 z#J4-^JIWTWm5IKitWr*q3AgGy`PS<3-7C6o?(Vz~l+79VD4CDyyas+Lo>L-cxktwK z&Oo)pCgya+D?K0XH{p%1Vh_1r-39aM*HDj)wF-NSqsy`Z*iOTrt`?ah` z-_%6r7R&C{_rW=bRcpcZy}!GMIv~fN@6MbQ{`c^EW_ED~i;N$hS?15gCl>RauJwE) z>6qmc&*wG155qSt_@+elTYOjITYR_X``vwOd%DDiy8pSJx&EA4bNhC6QwHIywYd|! zSep*~Le5-~6SA)S<6>?9%vt}{cg)$WgHLM{-LthFH+O4&|M2`|-}^4Zras>r{_+`o zGw(9K0lpXe_`Wvrt=~;fe7~yoeEAB#LB)51_J6-i{3g!D{U?|4U7KO`y_g+e{wC%7 zYi#RFxvI5zeJakk!Z=rSE5H4p{1?%)eNMG4cPNu>BFX)=sH*46R`z_4VBrew25yXoSgVx1^fF0d^h0;z8$xZ zeaOR;*40m=-#hE&z2odJ-gPy4nh$f{^)+O*PjpW_(c5M1yj6``Sm4@|ovmv#K=P;Y zyIS#=ZuSO;GnMK&!xwu)gC*S`**sbas@0&RUleR3*c-m1Ye(~*&l~nk^>%X;Mz`YXzBh`91}@i)rvr599#N_FW)-nOA2*c6OZ zHU&%lky5a`sAYv(N{ys#mky2vm9RRbq-oyRSg?6?OdlK3OM@2=mIA%FO}`|l zj4VD$+e4ejV`Uw`AE6A(i1QxC?(29TdZji8n@1|!q!_Eet7~VHR)#+r3;!c+8g=R4 zk+<|G;(Rrp>H45D><#IG48T)$Mnq6yfR7JX0?!}tibDaDqZGvPR;J3_$vjwpRDB-Y zLYu~Ey(KDxHbd7g4t#yEN|%i2LmmUwV=h)?i0K=Lg7TQIR|Yo?jBV7*-XQbuRDHF# zZDf2boHc87os`0HzmDJS`-r(NGoGZXYM6ur?%D6@noBxTE_uhJsXA6tp+>#oLI0w` z;Z1bnE9kQ`Mz)?-+BU2&AKv!1(-^zn=AiVpgBufV;_KR~lCCijwYg;Uo`2C;#q$F))F0Qib4fQ(`U`nqNoIe* zJ6Y!=sq>wlu04LK-r&9m{OrcCyfP2hU(?tI3np}JPQ8j{Mr&B(Q&07Vws_mB{a$gT zGPd}nCA#_{y(MiRWs&DG%4YD6+N+k*mH`HXK3W;^Sp|p`CYotTVGD zhDU}^VHFr0E=?0nTSL54h*$Q;m}s=~*x=?Mo^auS7FskoJUBM!jZq32XG_8WI`MW9 z-{BqiSJQMVTZTsbi*)&iLX}4<`j!gm4R4yGJx2Vc#7~ds!I7n#M@k`Koc#k`dp%*Q zz4RY%uXM3D>`RRXM|4F+t9mimHZok&#|DDIiarz!ZyFoWY~r0r_&EMJ@m~v0=f%lzKPS?GKvY)0(`;v7!+#r!?X7>jBA9Uo_Wf#Wppx{SH_!Ejur z>yT`({68LAdzFYM?G?vA)b_fCbUJOX1B8v+E8Q-0e^_sqWzd$m9mZ(O>zI4D(3ZY8 z42jU8nd6n};KjiZ6W;&8_+TZ_H;<16Td9t=jC6F~={B3L-({Rum#XM$01gp9NBkrC zlQr>fusqc<2uq#1oGNqqUi@S&4(Zm~5hhb97-M0m>K+D!R72s%uZuW^p?v z$7Iqy*}j!P_%ILJDkMPD_WUTM(}%$C_`%T7(ve|5kVf4{I>JBwh`%%VTkZ>SQ)_0_ zrJi!371o8z$LbN*HGS>aNX6R}gj}p%8m|Z$kj7HfwiHyyD&xMa&7^tnM|J)U*QYB# z#{7#ouz1Z3>FiRv+Z&QH4gFYG{M@gJBRt47;X}GqCjy%SSU#bRn>crdXA<)8S=DoiB&r&uBqZ}>4&?c)V@bQ4UTQoN0@Zwp^+`*y^DA3ei-!@aDb-cU7Qt_L~~^*xopRX>qm z;hSbtSl*}VnpTSZ<*`%sIiWk5-wp3Bbog7umA?5gZ<%+sp!|-*JP?I_ISLbp zU7|0U^FjTCixGd4eN;Vu5_>;BhsT%#@G?-~9cAk4xrk8CL!=Fet* za`vZQqv~`d{`;=1*Ig$bs@&S0xb5M0v-G7cRug9N&dEvXD|y6iBW^lwvy}^DkM|gE zN8)yeRDQ+0?Om(Gf=C&6!j3+~aoKGM2nYo{Rtx9h_;UBwUa`GvH6TV?QOS!hH^#|S&!yb^|S!DpM#D~Ye;zYG6n?Xm#> zWm2#kCnv{vNxpHviQfkN*5kJ<@{9Xh2XDpiQv8k#+jCjEPbF{RmxeyqybUG&d+}fL z`N_%E{7&XAaes*42K*j~{F3uS;vU3b+cP=&WaytwmitH+{`;EvN!w@f+kR7Hf2_c5 z6t_i^7LU%~`Y7DSX#SkH`L#xF5jX7Iz*A`z&rVZmG4YN>|#8qX_L$-1A|1r;OLd_#e2n zacrK3+cOC_NoNgiFW`0qzok!-?JoI`;y-j7^iBL%g>*yW?ZW+1+;@w66Z(FKG z`7O9@#Z8wyc%-cRaJv$>6;XS{b4$WMj^CYMs`tCNJ&oI=xW(y88DGZj0oiMljVJDpNjmpTb$=T7$8f(f6&|%uZQZ^`cPZln+<%CBvfN8> zdjvP>dwCY|w+y$(a9ba(i>0aSqT(9|2&et8$;mA15#?RhZvDJL!vA%xTn+r5evSKF>beNOTkxA5 z&9&q_khm-GzwVo~K`O4~wGqEZ@Uz8_N8HA6dm1;1E04JC!tEK{7FP?dh;SP5G$>5Q^&`WE@3vK=P6F zvbZmNI9iv$;H6@3F*9m`{R#HPAcZJ172iRp|E+=$3aED+zPm-%n0nIZYU8yE_Q;%s()H_$`mP z-HY4o@6_j`w9#X@&Btv(0!8CP!aj}rM%)#@C4SNK>}PcKYyFMkd*HL-`>E)y@C8NA z3dVJRhz+L*DywoHX4si*CU?roCnHucvpN18LpWi#(*vpLVn7o1a!%h+5Sm&HL0 z*D?(!V>qrRC#HTqv5f0vvZoBo;TmGy#b&`N<_cD+tP|BfC2O8y+9zqN2Zt{TI2>HP zdWCMdlD)QEidz}1`WI_mNAq*W{NBpNmN{sS8vUEi(YU$rsXx-p@iRmF)uhN=wAs2Q zfxERX?GoPcS-s$WU^zpVaVz*WBp~PLLX!n6-ugSb>XR;9K7s#g@X7cKz8AbT;s0~+ zt^}SB?Xf}a9!Cq4217vjf{w1@oOI9HFHy0qt0{-XO4>jy~v-vz#b@{0US^1mE>XQF<= za>goHwMTcic02g#*dP3Vz^6SHwIBH8GlW*u%llcd=n*UU;xl}~U!r{RBlZ0|u$-~S{V)3XCw*6^CSiTv29D3;rM@2oFTp?V z5821x``fU*U0Sd95_rW?x?0yI{2F-f-HGsj3Xad-rM)g$0SzF3S!<+zJ1Fmb!i!8$ z%KPG3tUvf)7x}L{oAKGFYg-vd68^{F)8h0A|F;mxSYJTm-$s7%BlUdyb!#Y@Pa=DUXk$sCU_kA05C`y<1Rq(C^z8}1Y{OAT%-VKbGXX&40&@7L$^2f(5mA^joabw612 zBjWMC@tyP!@#U;U#_M}i`CpmBUrOQcrSNZ3c%c+LdZa#ol)}Xn=9+lzk??n<@ZY8I zf28p1=GLN9=U+|QDg3S!z9fY|mBM$Y@OM-AKT;TV`r0G;FHYf=DO^n952f&pDg5;m z{y_@=Duw6Hs})DJ$0;d%P6`Jpe0d80c?y3$g@2I3&!_NwIe?EIX`fS4`0XiNPT?z3 z_;V@zjTHVt3O|>^^XA8;(Nz1qHHFVg;bID3mcpM&;jg9e_fq&jQW$d*wMW|LgcLp} zg@;o3V=4SsDf~nVznH>DA5qI*wZ|W(@WvFrJca)vh3`w@pQP~1DST{SWB&ORzA%Ny zQg}C5bcYnZgJQ}fIDERa@8B=`R7w9>ze*_V;V|-|qon9#6kl*0U*1Q0y1aP0v<-w8 zd;>_9V~w&L=O&P(`&4!tWwH&8os*58jiCFZwdc_-QP9Hc9^^{u|P}E0x}* zsqjhsZ-l=u5&oz*K=+@h*Jl}c6*%sni@@3s>iCo3?FoM=*8^L0dGUnxPvZLte_tZ~ zXTYMjnH=we!>3DI4dIdTEc8d(_hNp;I-7!T0>`?Wf*%FPI)Q>;0>`?Sg5Uf`)TO(!2aa7ar+8YW`CAwkB_a@wEOXwmhI~9)eeBgpK7Z7))PN| zBt7{p`hejR_J`=vPKU>c{}}x%{UP=JJa`d!euV!Pydly5FM>-6fBj9++XR+;L}xdA z!u-=%^jl;9cMw0;o0R-72FLo8f^P!HdXa)31;@INf*;yIO4RQ@p;xs3Bv|r$3TMIh z^&@|vd}{u|-=DiNY@Zt<|DS;+e|d!e|ANPS_{XR{z~3ygUgCdvT<~e|gXUAc52qwr3K57_a%HANSW+ z!J@mFTweu;PZ(eHJ7av*anKL&ZXDwEC+RQYL?<$Qx-|E~usnGjq_mBy>LH~OdX zbqW86CBGlm=gV{8b&2+W;cM9AY?J&Si2Tc` z@?8Pm^V@hl%+Q`VA9-bryJu)iE}(y?zZx&pcLXeY#PUe}zXIL}mYNBE0elNs&3Ev% z17UbQ^8b5qtVb;2e~>EAb6~0848q6rJy~C45&eljubRK$@Cn;@v<-gj>c;R%d=m*j z7T1>?9tCHA6t@q9hG+M##`sD665;Q{{|>@Q`PaOK_5dgO3BlphrF|FwJn6^uQQRed z_;hJ6FIFAOBeQTEc%29P3I8-n}0FmiF05Q^|Pw z>7Ru4k@N*S^v^fxf2pag=U*ITJ)=G3k^U;ZKg6>mdmBz}PWc2WNY_)C4{k-G%p)200f{-X*11t+q;;(r4H;_)On4li%f^A4Xd zzcjuymU8|z9RF7 z_7hzc>93E2rTz;EFZew^@^|tVT@b;4S`O>CIP(8bu=K}M5q|R~#%Ch_1nm_+(w~0` zz9XgwYF27mviuTuPoh3)>_Sh(KQ7;=7;g`dp0u=#uO2B_^u*&Q)>oGvmgl}y`l7=g zKB0dSzlro_|F|xXm2mea!oMB=$H;#M?y}#jf@kd3HPJC*lZ|0VxapPxSl zuTJ3JlW5-rmUv?y*Td*h`P2CNl)v0>2_NJMq!;V2%lLi|IM#C)d=)s>YZv?#aID8J zxNmuwe>|S{tqa@l0Wy&Bu=zsnCeuD=fn|K%1>OLjAK~Z0*ClZ7UC<-u)9lE9D_HJ6 z$RqK;0X_(h_4}s}VX@9}%Hp5?$U!4A@zy}lg{}>$K zwUGQ44s)JGet#6@|2}YhUqSqD0>^g>1Rns$cMSwTNqfalJl>M+FMf9?`r{zspGu4u z@qawwFIeuog-@4u>RUO#ON4)!_L1}?gw*$1=BMPR)&nrce6%YWKlAXH@|`jYzZ1u& z{VoB20)K{`^1m1Scs$++|2uGe&p_gDBmek`>z6E__^nQqSMd52ezpzHeo~icJmLIH z=X_D|wJqx=h=jK%}wS)TaZJr1A7@p*jgpT_a|ee9pckKL%Ne8m4g z@{jLa$b9-E_OnvIjTA-t@2vG<`^EkD2)GoNm-e3neUtXQffObD)6jQm|9C!*Lf@r5 z;`F*UGX6gkp1(=>`Gdr#JX@pq?*&VJWBhUEll0HBs60OdOMPSiTRx!G?s>>~_+^vv zkgTs%eA%Dt^5O~mGmZBp{7;3RNPLE!s^2!Sgpc!|b+SrG{UhV=tzd~S`eHGCO{OOS z4}4Bn;p6<1cqoCFOHcSowZlj{?C@;eTV?ztrGT@Gao^ zgpl!Z8#ulnBlwLK=n?+%Nc+Dp!V4q(SSr7N2g`jJMGvF)kMGAw4l7S#yx}kLnrKa-=oWm zr%PLle|$$r;$H@iA8FsurtrQLmaxh61mBfNzZqV0lP=CY;do8sXKvEPlPB~~W4TKc zK3&@9>7Vt~?-2=2e?0|W71tNMy~_R)EG;Yk`k1E0cZ>u-(WE}f^d+C`68Q!*PZ&OpA5HnE@snR_jGxBOr2OaJ*%*Ff3J?5$js9tT zU&{Z5HhAur8`E2uz#i={?HltC9~##*{U>^D|9{vPO**o-qG3KA7hj_V%OiKj!Uvsd1NsI|(%<+FTpWI3BK*e)Un?K2_VozQ zSE+~ecS9n)ONh`ls=ddmH`J zSnfTBPgwpWo@X)Nsc+mK5^ifEd;$L}@sInf1di`CO8b2j9N$kA{B>}A_fYTwaC|3G z@Zn61_}-x4Q^E25LBS_OpJe<=f6Ms3AAAb=$LmSY#q2M^QWF{PE5T+0Uk$br_}gG7 zflr6tNc|T^>HjtJCztTo{*?11@{j4|1>nW_$N7H>{MH2i5jdN`Z@3hDI*If?3APhB z5W)~WLXWOUVext@(f)#8_-kEWJgmQ|@b{+hk5YJs6ULN(CBLO9{O%OqnZkFa@IR&S z%v@voMhb68;j2^luTuD*Q+T%9n7)<5?@QrpQuyu^{%H!&$v39&r0~WR{%{I^EroxU z!gC9a>ANXhOyQ5D@V*q@pThG_ZA`zA!le}cSPFk5h5t2$=l@}2`hS?hlFS!DSYJV$a7}vSdSH(0$tkc!8g1~S9;ijj|1CBh4e-`^AA8^OZw$N0a&!auH${LMdNz5Ir*iT=N&KLnQbK$dyI zw}VIZdi|dSUwW*L)$7oIKX~j7_4583c=2%|y_EQimXZIL!~Lt^cY$TS=cUr$#g99V zte58?SoFVzo=fFPqa^(KdiocF zWq+vSEdCz_Z~dJh`bEQjB3Ss9xc%pzqt*0@=M%mUyu0_fDEtiVE#PGNt_3H{_YC-% zo9g8~_w6BnBlk`u|7*dr-_S`>@ZW%CKO*b1;1|HMUsw>~)7}xT=K~Rb`|5B%C3mbO z{LSxVy`{a^MgC8Mg+IAI!pEM=k6Rf(QTwa~C(FARoGfqOd5z^61t-h<_h8Xy5@sH6*Vm#mt?$v$;7Ww%`u!R5I`Jp^)_?uwSpOO3DlHTvY!tXyFrFX}MQ2*u9DEwZq$X6CdIP+fmcZaUg zj4J+SkMaL?U6VUGlHN0$pf|L?9r^!q5c$v5x^`cLZ+k!O%Xr!q;S2@4>$l z`dze@`S(@I7sdZRSoqmJQTp#Cqa=ONG8ju5(=wHj5|+TUOfb-2u3!yL%Tz;$YOz|? zGU^}9(}}e;0?Qqn45q9qgGG!j;a}ahdCV*F9>5S!_$z#C)xaM$om|D}FDd(WV$rgn zIAa;hC>6_Qp-|43g0kzGr}&%3Gg+c`I#w}Vu`bg;INXnEI6sIJ zAJ0n)65I5%dD|})xn|^f*`P7DotqLnG^vvj8#0*-178vh6N?fo`=%Y_ingEiEo`I| zRDwB2RjWzdb&Jkiv|OTgSXMB@aY(!4kWR-TjgCW_nqk|)P<8a8&Dl|7 zs1z6)mQ4G_l4%CRHg49l%~Cn%`?-8JF~H-2X<1W-mW=vEtJg64`3r}qkuMd3Y_81s zEC!a(;Ep=6;N-2qDisW`;CjV^ZIs=jW0$gy=b0GPNpyGHknPHC9^%9_vqh$W%e-_9 zhHJT2b~g_J$d_%aR0^;clnshSOak$LP%M{=S#Ab~v>F`5_AANBkjmxbj?2e3XLF%-F2lv4Urk&79o#e=l=7=qE??8X=Df8KkCIm?1VJ&M z&$>>o=$k7;BKAs>GYZNsQNKSjRO*jS5RtTL)8U0eAy+IKMc;soL>=G0@oH18eNeZ} zkX5Z?$NgYWrKL?MTGTC3*LWr-oh(0_bAr5=HS6@sbRDLKSs)2 zK`Z0ekUzQ&lvzFMSAwDbfkA1V_;=&Pu!XD@)~>@0YyZ0Q)-XV^GUkiTFS~5oIXCcE zigB~e84QQ{My^n{azQpnVQyOpQY$}`u>({1IMZ{=BN;mN?9 zzWIz+&1bY~A){3b8Le8#a5T(^mHIKd%>Nm~_47H*%ek&)z=1^Fs)k*{dU2*;7Y8?CRWVcYvUxL?D>?9{Sh*{Q?U8LC#B3kLY9GXDAH;4Sq=Ope+ow`! z8-zK~uIZQw5=0DEZo-Iqu9VHWdD{s**U0&<6AibE*mY#AA~p@PzEiNv#hhX0VnWoy zGpn`mv|4$ZtvuZpp455zJgIF9&sKRd?_0#QTX{MyJhKI@I^da1KrBMKS=$UO*d9wY zEnMVuUVLK<8?gO8)?hOxCML^{>y`}*GU3Ht#$M6Ll(AHqEeCeK_ zhT{eKtQ|y+Q(_vxhB}U$&6aJ)FBnePAK5Iomjy&p4f+IC^WP4CyDU6^ju$7|6pEV84)=Kf0AckNt0W0#B|TZCiI!SI)?s2|%0 zVc@k(h2hsO2!pU)5L+vH)gWj4V;RR|+k?EsHnHzovb<8`t08wH$h^iBA;^Up% zG&^b}c+s}4T=0=AAVkU`ZYp_3qgc!=Ox=(-$}QZWs5n8_F+3OQ)EFPZNLnZtZ6qlH z=DjnSwdx%e#w``tO9XboFBZH~-fc`QZ%j!{s+q|kZ{(vmnN0Xm5GDDG3wh=uX{ik6 z{xj-JBbkh{LoWG6c{+sxVimTfK~_XL>|2o&IQgU)FICp&(#m(q_X1R!S@r1vVW=x? zpK`7e;#uW9QY5cvzUuS~Ve%A8QqPrLx0LfS%Z#Wnn^mb>)Y%*yaRxV!4pm)SRYiU) z$z!cO!U9WWFdQ5TCB;H{CN1%d#g;Ugqq3GgAx51GSc*ojYj{C9tkmx zC*=U{$$|~Y8=)xt_m;I&9vZI>kgZqntx}L>yM~0)E!zz>R^w^9mI{m#qDz(#Y=@WY zGA_@~2W7*>6uIr@kZ2-BwQ`2#<&e-jxpKZP%WfNz?QtaWX&*|lRZ$kB2Vp6IE7;-v_LtdKQ&5)?`~#NP%CjO~~GT<24x^9D9vLC~5&y=`9@ zoj0)AdAFIJ7r^R#K3bj6N2~KOZXt`FmI<|Dswr%U8X1Ot-UaK{T(GYH%;js=U2y(N zx4$2@eQ?a_@8^RaP#nG_QOH^Oq6Ob>^5uz@Et0RzZ$39s=4dI)$1Gq+VBWJucFlGH zNt{y1=qo5|t?}EZTI>DxL2JF=K4^^?whzjI(zLx_OU81I zQZDNSxk9N}EEJ3!Yf0WKSp}DKcq{8>jJyn#`nl7q-7Z8+RNH(NA^ZO^lRtgiBPpA< zU$QOyYGW^7$lAq{6Ih;!qJ-(O>t|zU1v#_K7RkwG>h!E_P!1lV9%&!6^8(Zk>Za!Bw*!kqx&Z<3Cp`bSH z9ks;TF+M8h(-LtrOp#Bhrpsj3$oC!NK(JvJ3$U>IWtxReEZY>{DdkvrJ8iEz57M@2 z>%43GptS|7ZP5BoqkT}M>(dcNB*jscokG!KhZ>-BWd^2v2#XJFaWI)H$WSU8nHoWB z8?sTOB0p8LMRjhCFV18_`GV4XTVC=;`G%xOvYP2#D3vxD?a_!YmRMz7-}5|6J_rUI zJ$+SGu~Pd)Bb;0Q2xh+xclCK^E?*sP1pCiC?}BsJO(7QSWAnCGD(B0r4IJ{c%CFX$ z$SOJVv5?N@gDgTT3rpV|as(V?7-b|m88+~d{KQd}wpX2Z-a8ndBAw$LiRB1^v{@=d zx;IjXFraD2`*9VoUkUou-kjKc)2wLcP(x(4Tb_;DU)0rY%VX83eEXoaJx2SWwH2v- z&>A^vAG9_u+Xt;JwC#hoVDUK#iF&J0`-ElTjQC@gZZIt0>Mgk|&s~1T>Xj>mzYknw zAX(wk%lwX2sH7W>tSDcJ>gmXEE?lh&n<4q?Bb?Sd&pDUqMR>X#L&z+l`WfVW83ogi z@>+A09LO75V~{uu)R)<5W&v~84vwUq2W?LPrm>q>OItrE5LIPASmSNg0CueXbX%*v>mlmF! zjVN())0iB7Oz&CiJdTR|auzidKL~=7kIt(}Tfm;UW-;(xkM99Qleulk+5~MI(rHyR zwd&WlE6!BS&hS7YtXzgqRP%wp3}vi+G(4i%eyMEPrCfkgA)8*&_7uTNxahY{V#@m7 zR9hNl2{yweR3*{2QzH7Ptt>O(7|i9Xk0_9$l4q3jPATj0dB~ifHIcd2_QCB#)|$0_ z&>AD$HYkj6$3-o)>aCon+R`_QrYPpvet>+zjZQGLtvorIl#`|AF%u_jw0t4tL|Lv4 zbJQz^Dk~Ll$S}hN9d)Sk;8rFxU*gO?< z1?zh#mT+!X9~*5$)(Aq|koEp;mwUZ?+l8!?gSOe%rLt{OzvgOWzHO?xR`i&CLyM`{ijX3nY7tWi+2+wf zqz(PW@xh_7!QpBqXWJz%{h$wr5Yviv#h{%X2bJ=4n5s~&&VsTL?>MMXwa!wtrC~b@ zn(e$=wlsQ&sdgUJ?!330&U?#w1uf8d7dWq=tir-{)>zz%?=&bguj8PdcWkcnk>z$? z0Jrlo;C9{u+0MrR)&M$ftbFIG<~wg!l;ArqK<6VX+xgHgyn>*eSF6x@wF;fjfv4yvcHROQE$O%b9ghJ- z3mvBl6Vzz|;4L?MgTq?CNU$nnTK#I_mXS)SsxY$mVEAJ7QwfgLFSTQoUp^89u4!?2 zGZYLrI#dF$RC7VQeag-2nrE0=g%2gQm)h(EicR^Iy2RRy6?W4I1Z=j+J5O5@fs#gTWSsPNXwj9X5?z)+u;?DbYyv1Gey2KV3-#O3JAW$2B%LRLX96{XU-! z&&}fN*_naB8$~HehEuRyhIFXtnzS{bMtUZ*X=tSA4P`QCt9KYybd{7h`T4mr2SfBf zcQd$ZBy~#6qxjGvJf0McAkkpQ;?%LPC(F zqYlp1|F$>0&CJjcx6%!_z?n&b`*diBX1Q?dx%@7KV=!(??C1Jb7T@8x@OW;GW zBVsdu`QmUMJ0MJHW^!l6wp$dtvlQGGDI|NkW}Uzu@P@_=v&In!qN}-8hfL2kvPG+$ z6YYECgM1!2ocj)hG0%}TtCW*1*c=EeZKv8`tgYkIue2+gt>d8)hG-!-IED!<2hDf6 z=ht9OC0=Q*Y1xG43wcBO#Uf;j>bcy8Ln|S?V9-znXZrM;ujCEsbIOkjec%*J+$2J$ zy>Vr&&sPhPJ}vHNvBQ$fV!(pKO4|$iz{kGN2+Id&60Ch-p`+(S3I*%1Lvv27JW!|wq>@hAFzsyFFT$c_ zJ%c4!jq3KsCE|%O&BzOvP`Bc33E2$a8}E2 z?{MKjZX0!0-IFRGPD=1*+~rmp5Bc-^KmusV2&x?vQ}K`wu> z8Wr;%-(NR5QfeH-l8F;qBkG))PUTQGF)n0qAA`ds)c?Z!9*whb`W%|i!c-1MK9>*B z_RSXIkNxN(k;);_bp@|l4Ju<1v&c!wFo$h$nGSaniwppt3yQfys&w@^9NnA=*+w`c zALgB#UL}{?iqRq>EibJ)B@%>{oX`WxIZ(V(5ve}>W^&~r#8jS=q_AHVQBhH~3NyzN zPQHw)JNH4jR8a_TYpL2gigk9_o&{T3u!ZLdH;>d7C)oz7>Qfk}?D;5A#bn7_Imalt)F#KVi5mIslc=rShnz$qo;?t|DW!;~tu$Bdt{F#LSha$m zh5KSFlibvy%XsK#@K|if6)~L!|6>(U`KmE<%?tK>KAn#_gC?1G*f)h1NhBM#KE~xD zlk8K&(?y0BJ(AbVyuJ{IN!wpZYT|p{xC{LAOS|U}ESD$!D zkP3dj$dtl71Il=8{S{$LX$Lmkb`xUA_Lmbo>?L^IfGpJSe%2{=thxu!lnc12T}EKy zbHTVt@>VG6;C?ymRSD8&A+)eV4ydspQApJJ3@0f1IV`53P1vl+QAn&y`9&_L2ZrsS zJQj|}rfHV41+Ty@H%yfoEUyg@sb4{0tFi1eJ@~$&FO{N5e~! zV$7@Pu_!xeB6}t_%9wo}B!=R)O3O4#BmHr@Vwopod}#R+8d!FKM8$;|7TtOy$t@c- zdK#9xz~f3c8#^?Ca$MlA2d{Tjtc@0`e&)|!ecl<3x}W5VQM$5;22t5?%9i1Vv$L@o z8%*W& zwA(TAZq`Hw&qX2|L3ExYp(vYZ7g<2=+Fw&xgz{}05`k4YkCGWGzaAICeQv1KN|#hk zG>k}-UQ{&0#xQuc8ugQW-edAu#(Bri>Qme zS?%7Y#U?K&akmhhe@W*d{u`ivN$ax7}RXFW9ERuGm7uBfP#Y z?OMNiRcO3<)qlZSrI1;`&{E)JEwsM5!_8=lcaVjA0aFbY#>gDQF|jY;po4Y;lxlk7mVEUO5^+rtq;gBB3<@^1rtjXY{Jmnw?n$q zd31*{VWD;G<^4Ri3KIfG^umUQY_VKpxaaZjnZQ~z8;*<^W;b*SUTkp8u+Zrn8pJ?g zzewp-g$q8Gi5$6kR>s6d+}T`XGog>z&%tgW=B#Y)7pS$oj1pSj#8MPWsRcH<@V++J z=~+1)Y)IyEn1E?9UOG#n#%47cah;`L)&zNno@Xg?JzwdJ3)DQaUl*#kREM zJ7p(Sz!;>@Xh#DUoxgIl6FQWXawfZ=a<=3akPBLNeR)cf?z)b;Gm702B}B`iqK%zO zDF`wUUrfOj8)O4phcme<<*V z$4A{WSFc=t?ge7h5d&N{teNj|ROWe32McKP<}`EB$pumuIniL3URzzs2Bq7Qfn87= z!fRnEQmv~Tr-!FBhkDN|A^8eLCQ7t3^@3A=%)2P)FOG=zEgSxFKHx%Qq3B>{FkC19 z$4U|{*1}?PBY?9>Md(A;@PFj4SF$Nk40p0+6vO4RpB0@)HnL)7Rvi(CBC{=nV*~MZ znp~OriX6maD`hZnREN6Z?x~?K!l)^w)@e3AQw1gLN(`SV#bpB@?R8jJH96bgp^S-k zmJ?67WoI zEe}I{obF{=9SpI2}EAbfL%4C)gZxd;@JGN~!=pPheJv+l9>jCrJ;%GVU zqF0&b(7_Id9Y=MnGP14z zVsB_%HeMLzFCbAh9HZR+jdl>|L&zB(OEsGZ>>}Br0hXEozAliI5}~AFYWB;_O-Z`~zGP6!J4GKOz+PzA zt5)Gq$YC@ZSn~r+54v1s;`rOo8VRBLG*rfS%R!z46Uv(SR|ThH4V81$>o)?flTI1R0>9h(N~h5 zq)cv^d$t~nH}}elzFgJ~1s_N}npH0BS;=MUOqUIX%Bfr)%w!OPKshp*^QvoWwhK{~ zKq#6Eps>hyy_ks=@k-0goT(rCsAX2;UNf26ZPvBhHWx>Rq8c*JY`2)>ypcG&2aY4jKn#diz$Vy%+N`s)bfFg$r z(<9Pvn^j)%W3{RAdl)!Kuw>9g0|)H`%QAw%Fak77vgK9-M+jZW?H5Ow5>s|!inLGV z=e;}|h9crg%XI>5$JaQ{=DSK8dFMqo0${oS&uw3fvWj4~j1B6b7!}WjbYldPQ$aV6 zY!A+eo4e}!IBlhCH4UaFQmGD;s2zkhNg_eC+X!^0utNoOFtAI4?3f)3^2%B}9SUz{ zA=E{*$Q|RHNGIY=R9jOS(X?;Yz*Maes{h7RDY~|w$s`CTp8!C{Qab>z(b0~F3nm~j zN{g`o_9&?7u%xSQXY)@{ zNXXVBBL(?&1EM^8PRSY$wz$exhEm1jl6tmK^kMn=$O$7po>0w1aM56CmSQ2;I^dzb zt@LBva+ZTtPOQ=J`WChcRm1{ohb0N9;DMK@WPc^XqLRHF$j~zArwbH?Cd-Y z2hh9gRt!$@-oUD#drH;hQgfag|lfLid#2OAggtkMjbrU}G3AX6r>UL5PLJ$70Pa zw*(6Lh#Dgp1+4Ow4^X8RVT2Kf49#s!ceSC+_#9rRDM+m`KvbN6*YG2k7}M-?8;X z0#}x=Fn+!)J2D020K14I^;6g5pUA047J9Eg4NEu@}d5DP`@c1K#3NR-Ui8YuZc+JzM8b(_Z+Rfbf|Sy=U>3a7PIKj;?8c zqiNUA7Z5)2&%=Qdj?cSm*Z)-4uK$jvz5LoRjQks?_j-OyxE}s?^L_f=|Ey_?`5ixT zI2{Lyq{8hZ+&;qDaiGXg;0e)hN$=Sx+%EBm9!W!R<7bKgol% zMwKJ~tow;QE&sM_Cw>0fA9R3LpsfV=9x%^4l;%C?Ey0nck;2o#8 Sp5MuEPZREkm(~Nu;r=hvQ|mhb literal 0 HcmV?d00001 diff --git a/tests/secp256r1-decompress/src/main.rs b/tests/secp256r1-decompress/src/main.rs new file mode 100644 index 0000000000..d78011432c --- /dev/null +++ b/tests/secp256r1-decompress/src/main.rs @@ -0,0 +1,27 @@ +#![no_main] +sp1_zkvm::entrypoint!(main); + +extern "C" { + fn syscall_secp256r1_decompress(compressed_key: &mut [u8; 64], is_odd: bool); +} + +pub fn main() { + let compressed_key: [u8; 33] = sp1_zkvm::io::read_vec().try_into().unwrap(); + + let mut decompressed_key: [u8; 64] = [0; 64]; + decompressed_key[..32].copy_from_slice(&compressed_key[1..]); + let is_odd = match compressed_key[0] { + 2 => false, + 3 => true, + _ => panic!("Invalid compressed key"), + }; + unsafe { + syscall_secp256r1_decompress(&mut decompressed_key, is_odd); + } + + let mut result: [u8; 65] = [0; 65]; + result[0] = 4; + result[1..].copy_from_slice(&decompressed_key); + + sp1_zkvm::io::commit_slice(&result); +} diff --git a/tests/secp256r1-double/Cargo.lock b/tests/secp256r1-double/Cargo.lock new file mode 100644 index 0000000000..4235d044c3 --- /dev/null +++ b/tests/secp256r1-double/Cargo.lock @@ -0,0 +1,779 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pem-rfc7468", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "tap", + "zeroize", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", +] + +[[package]] +name = "libc" +version = "0.2.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +dependencies = [ + "arrayvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "scale-info" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +dependencies = [ + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256r1-double-test" +version = "0.1.0" +dependencies = [ + "hex-literal", + "num", + "sp1-zkvm", +] + +[[package]] +name = "serde" +version = "1.0.201" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.201" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.63", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "snowbridge-amcl" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" +dependencies = [ + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "sp1-precompiles" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "cfg-if", + "getrandom", + "hex", + "k256", + "num", + "p256", + "rand", + "serde", + "snowbridge-amcl", +] + +[[package]] +name = "sp1-zkvm" +version = "0.1.0" +dependencies = [ + "bincode", + "cfg-if", + "getrandom", + "k256", + "libm", + "once_cell", + "rand", + "serde", + "sha2", + "sp1-precompiles", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf5be731623ca1a1fb7d8be6f261a3be6d3e2337b8a1f97be944d020c8fcb704" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/tests/secp256r1-double/Cargo.toml b/tests/secp256r1-double/Cargo.toml new file mode 100644 index 0000000000..ee5f0d2cc7 --- /dev/null +++ b/tests/secp256r1-double/Cargo.toml @@ -0,0 +1,10 @@ +[workspace] +[package] +version = "0.1.0" +name = "secp256r1-double-test" +edition = "2021" + +[dependencies] +sp1-zkvm = { path = "../../zkvm/entrypoint" } +hex-literal = "0.4.1" +num = { version = "0.4.1", default-features = false } \ No newline at end of file diff --git a/tests/secp256r1-double/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-double/elf/riscv32im-succinct-zkvm-elf new file mode 100755 index 0000000000000000000000000000000000000000..2d5d618fa58506fa0e9c8146af903b267ebc48d2 GIT binary patch literal 116660 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%0D0B-{;egHvj zL?GpVjrNfEPxR=YUPt=Sw|e;K^~CSPIq>7Y^lkx5`Q~}?{Q`V6{$VfttPRW`;G~B; z!TKJZaz(qJ)ZjO_d5LL&X_c# z_806vQj7HO8hGzDVMV9g(~n!I=!bq&89z+$oEIxt0^a_a>hONN0{Tbsza2Ws-#uWt z=O+C}=U1@%gpB0z^k3rFf3AdI{sjLvfJ4Yv&7Z)Z`jAK3@B1Fs{B+P<<)!}9 z{oS7*@wnNSKfxQX4a z-x~0j`@-7)llbR-{~i@dPK46Ff9iJ2C-F;rE?t9sOnP#LOZ*=KOMO4(;Wxlif3v*sTV*_@ zeiT0vepw&hQaeXC%LJ7EIE6@1R?MRI|e01Pj0H_VBY{ zX79g!@Y^iLf1%g;y@dYtCh=2T)t_!!O?!}EIp-$jZ-0-(=svnUa{}qj z4Pd#O={^!G^RExjC%(;;_dwh=|IhhSSjc$L_u=1qWMw~Z7~F%uoMY4cE!cfR#`p2R z^LLf{`!)D+A3p3v<{KZDa8Lh3*bS~qJr=(i@RvLI?h`UPh)>_kl>Dy->-(F6uLJA* znt~qy>-(94@B4t8p62&2f1LS|`gw>1q`uExiOnJE=X9{}{};edYyJQ~1)iqM1Aa%A z{XP6!J^GJ<wV!*zXX1xeqH)z<9e{v|C!KB`qM83lOHv|fu8~Qk)Do! z&Zmgam;NfSzC$eO-2qOM-uu1ue*@O{aK%3|WR&m93cd)e@6ZZQ2ggYFaDUTGM0hcJp2+^-=7u#t4Lozx_tipiQnD6{0iO~z!&^uSe$u6 z#x2ArI1JML!|y+e|B6>!{j>1jMKTb)TEQUBONQme6EdF1fAhucADy)R(`!`rM7C4`O{DNBak{KEI>=gZSyMRr33J($D|i#ZsU5gP#K*LWu=G z50<-)hkCeeJ|A;>sZ#$ZgXONH_RoXm-s3?Y{k34Z13BHp-v*xnKFq_v1g`)K|4Vvp zQRHFpfgXM@Snf<}`T|()Pip)*u-v6Q*rUH6EcYsPdM|+Gj-}?8Lrp{7w?qt8>74?W zyO(JXcY);|=8+yA0n44tBRu>)u-wno`TZ4m75D(pe@2Y)3p~}s?+0J(3x6S4?sDq* zzW|ndojSie!E(n_*WYiza^F+Q7u3(;7B&yS@9^SZ2$nmbI(!dU?t&if`F{~C_d<1j z{QxX?M0NfC7A*HgHT_H`3b{L~(?1O?_eeE;FIe9(miD>0Pw>~l%U-FB_rC|r_;bDI|D!HCcLP4NqP~mgjefXZ@lxzC)6)}JuELCH+?_u3&eL_0N)?L&j#>l z0MC+zv-e2;G65`J)4mb*C_=`E@PG2v%6K^hej2RW!)P%68LaOw3;*q*{^cICJW~I2 zHn~{0&y#`l{s5Ny%1zMg`Ay$nmijm=#r%iAgxCIp-6v$+iT{hFr~8Yz5BU5AZw=rV zefVdDe}nKRLMQnTrIC+btCVjZc&QIde6zk8mKRURI3Is~hg!m44%Uy`0b{Q)er z{`dsn?~8vtyyC8~IP^?4i5I+_0 z58}Pwt_~l>`vU$mzf(=$6Tk!aSNjL?;{ku;yVdkTJTu@w*N2b45`L!sRDWUoS-hG4 z@wz9^(H=j($}k4O;xFyfel_zWxY@)11eW;Qz%qWl0G9Y?diazKe|V1`FFSnce+2(e z5}%&`gmi_^e-6S*FATLjA>){n(Pt6Alvn%T?DJoO|6ZT}I`C6IEU~=#{jj`vLdI9| z*LU_Mz8``0qwC90|7-mB5udJ)k5C@L@<@3Od$0Oa{inlUurusAy8L~O566W5jfy<< zG4M37>YrYH5B#7K{zlT1_~HbU_TD^BdVYFIc*aAO@Z;gR0smz_yc~X#__mRCN$*+G zZzF&5NO^Awr2m5e{yzcyW&le(UB2`Li%kLd2^mK&AbqfZKG8N3r2XVs@1x%eeK~*B z-}gN1=a>6@^eTc~VfB*u_Cg<}e7b!PJq7vBhlTJ0AN>OSPxZCeDsYDne;(WeR{eqe zd>6b3JcW3K-}ZvHfWsci)gp-@}pA6t^0ACZpI|BIG06yr{a`d#pA4bywYzOdX z1Nd73{9FJZd|Gw^;3Lm0N3Y7a2)ws7Y~0y|UX%WK7I@h^ z!^VA(3I2QVONYASm*A|>`*08Ve(*exel2*P&wmJPw7KK4guem2aeCOeB;>|_8(7Xe zF7?7c2Nro_hKEl-%Uus`^Dv)|Q|lp(o2YM*uP^ZY-wT%cM(+PfdV^q@Uxc3o-vyTW zSMD(ieg!P&%i27A^as#SkbfQDwczNH$X8zdTnA3i4D+=!H~g2ua(}DU!w-O8^7dB_ zLCXFW_zyn(oe!d)`<|;Gko12Cmi0rcmww;b%wO-KJs1bY|JZZr57YVNKs;M8N+1je!06dkyT* z-}%eI->#&84OrG^ZNxA6eE=-$rI{W+;6tSUZ((JFN&J_9MLy{A{67bl^`_jz6aV|b zvYsPZh5rB+d1tGK=b!J&`zt)01Iv0;?s`l3e*nvRM~D9@Sma^dAJSBezkJt&{pH&S z_Lpb*hpWr`uV6V(E%uWnz30K(sDCN{A=Ll1ALS2ke?s`}XJFYcTW-Tle5M}PNFb$cCoS#^7T z0_<o5)0dr2(|+wkws2!aMheM zmd&w%W~wWmHRDN){l(2xI-ZIq7r)JToT!zyEi0KzM)L(bms@N^mSi#4A1NdXu~gJa znXz0do{1%MnRFqV%-GS4<-~L8yq9yyqSZH0ilxM+W@mSACm%bo9bKHkwB(umnt3a0 zr*kn=yKZc3|e z%6Q$BvAQV}M%>C@*jpN~@}+@+c<)7y!8c(#<(n`O%rT~-*?25pNZNKX9rdx6ZXkUoMYLQ3eP0cmSg2JW;T<`<}z`!kjf?E`Dh}WjbR2- z*ui6*nv`aZe8=7Jb2&3-o0dqnxyF(&1e~G_%1>xJdNGgh+Rf@-v&@*NuOPEdOEwh zrFQh+)g2=)!&>INWqe?#bJ;mdVNh)2+G43TUWmn$DaT$cCVAIHFn4R4$xOjYI?;44 zZn`6%Ihkj4GSAp#p4McZ@yR?BlX)g5^Gr?VnV!ruGl?gRIdS#Dij#OwRzv1wHDpd! zLuSIjNNv88PgwCUVy5hL5~Ikelx4;+HSA4jGH&wS4TQ2jG4>wGSjm(r;!o0vM`QWi z{*c8K6W5H*s*fyQA6cS4vZR5r=+0dCDh#nl^4VxQmQ3ao*+dqD%LTWP(b^=j+9XzO zl0o;X94b`sCY(xfv_5;8uSXJQi1XvXO8 z%Els8IRkk#9&=cI*p{kVM8k=^_>?(c-s!aYph_f$wevzEl`5DPeLt(4jAfS@DPS}` zT5#g&d?Jy~W;0%MPV7gT6NY1qn9z@bVM4#S(YM;}Pe;a7?KY6+VvSlKXibf0Zgq<-HZhJ(dd^~R= zKXVel*d%_|B!2Np{1TJ+B`5JqP2!iH#4j_kA3biudZEKj>^Dih(A_2uH%YxPbM`rF zI!gsR6;Gxk@x19obBMu7r1-q$wPS4(7_U|=uwN|_n6MT}+{k77on+h|h$OPCWwKEx z9^+F3Co~eC+1DVM*m=L zpvQ@1(@8$B5JO#&v!dCUUV-z)m9FBtNFwU6R8Hs2ydBF%le$qR^EHjhd}EXPT9f+5 zC-p@_8OTQ%lCx&PLhVD2Q;t_0cV%8jANh(@FWl2} zPMfn(S64zMEek!qFOuP-C53d}%sK_PP=B*z&A3}+Gzxrf%E^;~JpDKoEyQ9BE9gJd zf7^1KsqX&HF?oRTQ#K!9vC&MJW}MY7YNNkdC3wvaOH%w8I+22d^kg9hq)k+Sf6Js3 zg`UCwE|Se=Y%A|X6NrO$HdTmMC9C*pqMCBdJo-qc5I$p5s3@+o@w8JgQ+yRCo=T#o zL^Wz9Q86d8*=QnJNLMtLH7U)q!lgE8S>aNfG_Gsbrvi`VokEror?abATpeSm7)<5n zsQ>JqV*g;t;qSaSJ4kj^nx}56op_>d(wNeY3iG|qe43}9buM2^ zUb^t?vrd!#m5y17JldQTQ>kg2qQ$H?+p+y^vB5HRd0+w0!ya5DcZ#r=|$P}S? zsR2T!lJa=sWb#RL+9m=_+%DK`kk!j$^;fXDAEae1dCj&k>#yKg{mmAuKLb|%{n4tw zKU($kxP^jwLLt-=Mk((Rq{m8;)l3nIxRa~eMO~QB@=e2%h;d~q{-`k5623sGB@%`z z(IYtNbS`F_xkM&W+2~;$R|m-$pJ~gm{hPB`iNyG7Wc^2oXh?%Y$LjK}~q{m$~(^dWaFIk?M|8JLn6W2XD)Ct=qI*DJI_tKeYJeN;6 zRyJnkv#~7tAeQ`=lZ+KuJSU=&%1l?2lzk?zMQW4QpMlC;UpvZNLQR#NHJplCA4}MSCB8U3(CL1Ax6}PTcqhC0<^^MB zF()I(m>d+*mXj!?S>;ZgmrPZko#2Q@y}Bp#8bRHWq#P+9MT$gn4x4YC%AwQ!c+Z-w=WYP!=<*C%MIV<8IJVeuRo5Lxn7&)Mm zNaV7162(}W%?!=1wMi3F34xUu=QhUVwC2LmWKS!VP8Lko#7Pt#N`A;>lsc!bnmA9s zZ*5Z(x*Eo4u2j`UB1^Nq-L@t|K(`QNWD!`PT2ODWfVC6(Bm#`rXKPkMMLMlbTAo~M zla?o}nxvIAXl+vVT_zeB*+cM(oXF%XbQcb1`C?8?zShfEfNeC|8DXWI87U8FH7Uzu zL`}--qc-WWN1hZLl-E`hiP7U7$Wdqhd{T5S&wQM+v)QaA-#2C{HgTntTdcqbkuy0? zmgVy~J00aHPcF{!E+?K%=Gpi|$l4E5rMM3C8`JIEc9Czxn5iY_oVIX@tD@*U?VROj zFB>yhpdA&cOYCV4DIp=(Ut|TgEHba>?*;R?1j}NU}3_yJXD75!_5M&AiiZm%94~x{JM( z)Z)aYmCjm>3T7$?zcY^hFQ*uZmw7**U@GH4DAO5Vj4GgSiaOb3Dr0jJH*RK}NW9EX zwMom}q&8`p_iK_S>L)EvNi`!a_otea_19EcYONV(d5ow@S(#;Pla?ox+N9-CyEbY4 zwO?7d)Q+|OS~ctEzsee?b_VKiET5{TR$uX{YHE_!-&z%ct!A+*!gy`c`ny1^{?>}s z-&#HuW6jE{zr$3->zXxC*)*t4T7QSJ>aW*|1X4Q#^$)FRpFP36cC7W+YkWV(*7{jH zUVpvD>#x`SnB5W_k(+RZ!^tFB{dHz@#S*7|Qh76xWMPtzB{|mPp3_l#i>4=wD>`-b zI~J3jpH7aCyMZ}N-rt{HD8T%X#0JlgP^SuRg`tnRnLkc}D~ebmD2b-GMyI z)hN?F$rG!K%B+hjYPhSOLau;L(Mlvu4%4Cc_f98G;>n>Nbq-?Okeu3?*t6VtoN=-X zQ4U4hj^pHQZfM1*3$!PxSkAFiS-vUhac@n^a+jz{nV2kVN-0s^kV%ZaXXKuwaSIng zdMpldpk|4Bmru+{!{!TCJfC#9;=)}}01Yi-i7*4DK)xnRb#@;Et; z#!ZEFbjMlLbi~O zb3-^&(XO&@Y+3PG4#jUa8|R*kA)}pM8 zhc%P0tUqd!Rs{9hr1h7-BB2;=#0x8RY6CWzknRsSJSi#meHOUeaj&#bO;(cdYf3vgD~Z)w@+#t9eXW&{X|Fy~dS2b6^*3y?e$GnOpMg~UJdmot2BP)zK&t*?rR$G1U4Ol% z>#u=y{hSr8pS3glL0W&YGW8b=1I_jFYo`7|GgEiNvMW<>22fhmPg-|tajmKTSnDsA zl6UJGGEAi3I-9^$^KqTA)?Wjt!RyXI-8_IArtVldIbLrD5JT5wyL*jJ+2Jb<7!{)+ z>x!j(zrq}&aC+COKb4YA{iRmd@|TSU0PR_|8KSa>OD1ZwPWSN0VDGx_-aP3kH>Ew$ zAn#Pcl7@OI!)o8+I<>_mpoCd{9mrkJxQZBW-_U<0$h8gRZ6i7ulW|PDkc>xjNjv8% zf852AmqNldl2pEI8tEHHRnceTb|Pz~;!fU?a|QmZXtkqX-q%+v z`e=$R&;sU|qNd4RFQvLF=ia9ciRQ(QQ)f?izZ`;bGBNHF<`U5;=Wz1Le08w2NR6C$ z@6RaXPfG}s;AB;410mD-bUw$87C9dhW9PqS$Yi0rw_9Dbi6s&ojpXc4E^XxsmanFL z*E=#*mY7(E_M*xm!wIfx=Hjf)+4W6k*zCo|hrOmxZ*|MfFx0`_#Uy4LSgI1FkU-JK z&Zrz!j>prkp{lgI^Q_I_L?T^IwvPk;(zwn-(So{{#{6cm6dOh&t9pvLY)>R|hI+fS za_(Pwlb)R{aFmAD;GQ$r_Nf`kV&4XNp-$Fpt;qFB2rhW`I3@8~)mbdAnS`dZzpFTi zE8P^Ek?#twy$E5423DS zrDE76OJuTkKG0<=J)HzqPahbBqdN=TPEX$C<@G@h?Q_d8i&l$V*>aYMIxd@Wa(6(Y zOP8Oz1c(-E3ZbDN2V>iN-d4>Y? z3*fv2S6`j1lS${;E#R!(;yRfsIY|@M$JpsfV$e)g8FUh=Q;}h`QA`Hh*h8Dh-2`{Y zcpEnIa&ZQL7~LRRq+EqXEIUo8q}yA@T!HmVDn1@6}i)Kv*J=G0r+k4YJ zX#!StC+$=zyRMTQV)H56m$kbGHgp!(I;BESaUE&L(=oPAoSYepw}nXV8+XFFpqPy?5kDt zu<9c&ht@Al2T~}+um@_g@x~4pS2Wz)+SR>q;uOa3g@F{zbTaL5vn`rKKDIqG0Ob@a z{m{F+?v8IrP&NWMwifa!?1gwUht!_b%$Puorf>@9t&<5xt$dD62L?vBw%jog3V(MR zryVLMAu%wSE^yhD8`)fI&bamxRE`tWE_4rxk*u7Ab(D)_L`~AXgWnLVtE7O0vs8w1Z3O0 zrzghVv^t*B!>TsFp_5Z8C03F$tg|PcFs&FiHMm0-GXo2{w>eRES4}jDM3OyCC&TGc zR*hC*qNy>FjXP0R$B$irWG3rye%wjKGKKw%f7~uw9lyhAc(&f1DED_bq3c#r!Y{Ye z<@A*qnPSGD@y^$_O{#2E+B_7|{>Yo?Gd zRGfh+Idg7y-G>}yXH~=lWv#`O#gS85%d)0e>g;pPcZluST$T=+;3iZy#!YEv+BzcR z;+TpnX6B2XI$kjZ=}zi0CUV3o?qI?r#ZZ+?RVqo84T^iJrT`2~V=S7x|0n@4Ema|} zG?YGW=3f0spRweeQ>*WOkSaEi3o$eo1v62wOtCyod8(_iIvO$Ka@6l(&#gnCVnBhT@nD;c>L5Y4$O^ z%z8_z49ddJ@+|~L@(n$5lCF?uy5Y)E786A_H)PAX^WQfxP46b397QnAWoMqdc;TYX zv(7&KoG~|K5@;}x)~K|M!mmsz1!w2b>LZVSkyrbl~0|OC<|-CLS|cB3hhaa1AR->y#BxW~TZEedqG? z)Gdol7MVT~wYYVLbs@M(FQ+o;3`WE(Y~Lo#L=4MUiKMQ@N~9B9%cm}rnH;OJSO$B9 z+}ffp-Lg**tJ^Wu%}F!4uvFc@T#E+6M#RfHClkX48Vd~W4aVJZr~cpxu@TQzA`arD zF^%n0SEv~6q!lNG0ys9jMe)@K9@{dbnA55L`q;RRe7&@9m&+o ztqI$pb`-k!e?b(w8Q*>sS|R%OW6+H7_G6f=E~OFO722eqY#4J_DueBD8*b-_D`(mY z-U{LE#Keiaq*aLKQyG+GR=hGj`G;;MWbfixLTlr5NzPz%mr^pqwLk9tD%Prb&^_Vt z1p~a9VW!D&Y7^Ndmf;kVW@$0%_rGLE&+T9nWJb*crGb>)<79gW`%50!`R9117G{&zhK0(56t{A5_(H|y! zBA4i(##ymsF%iw~Sd`hpG*d}e5o0CQXfe*`fG`Uii7f0@cW_e!8~U8iZqZn~Aa<*+{XZWv`4%6q}3^i(foXp0{if0=ncI z+gTXS;HyYE#&b*-1eI#^J3t4y+;uWDEs1QnZQl*-O?CkHd}ImZ-ss;r-@jm}u-I&v@~ z+dJ?+Ek#DogDTnFoccu-1@q$C-YCxZS{c>Z9zaa$3!+s zl%~MnIzF|%3h3*}XtjmUI7Y*wlvxwK1qW+X`;<2u+%Y>~e2XavVF3HsF}7Y&I*k{k zYP7)Cc>?uVn$0x1;a1VM)WHMjEXZhaL+9FT&!BYon0$vVj!w`lWdCn(=dvR=6@+02 z5FoJtv4QL+8x)DCWw-6NE!Y521QH=gNhGqG_?nEwWJWWJfOlZQ1LP4{@EBS02rOC7 zGVJ*3T-+Y_aUV}Np;6XeJ)jh{Z%DR7+hVn@c%WNi(arDLu%%joc#9;$q|AW zX$HmN6L5O&0uUz|!U)kr(Cohgp-7e;0oDCT;ZfBIIg)kS>%POz zIZ(G`=FbS2gph)3#yy2A>iOg6P$% zmNY;beFb)Pb#8r?&BdbEj=Jt>u>gr>@mVbHonw%ii$Pz)GqY+@^Kdei){+*Cck9K{ z)kc^4i}h&5V$tWxx&O;?b@HRVXhf~2YK23e(A@;?)yy6io0S6kU4QFFqRwIfxbqNm z+fBppRD;dJ$*hU=j6yP6>s#-#$IQ6GikPVoSyM(#GO60fqlOa^0`34&W0bbyfmPGU zYbaX9)77qd5{M9-?%GTdmaOP%1$XB)FLRW8!h(&V&w+}!^_;C9hf0Z(U*jkte%GX? zAFYg+w)z6XR)#$%j=coU{_^hp8iu3TE$iWkuRM;Uwv9+noKeZZGaM7G2v;Xev<;AH zLdz?2un?lK;bEmMRoKi3^qL!HgCo)1f9(>Y`b|dmEGlhOWe4>^-E*-y-4LEK4HCR< zl0l8!3Djm0FIYz@sTi^+qaYUBD`8HpX^u71uGVL_eUMZ^|I zcZnG9Z^{*vh$o1^Yvth~`vIPE20kTvsNsUbIikR* z`#*wY+as9Qio`Ctu8s_zqQ{N8VM373JR%z@9$RoiyoCLP*~K1-aixk0)uP7W6F`{i zoHs$Hc}T9AM%M}r*4S;>WWXagtMzLv7CO#=`qZrp3sVuwH$ zfuaEdOI`9cjX=Rm$?@rNo&JP3g^rBU8Xq<3?T2^oKHA_wBppwQ#)Y`VK?ZdDdR;r6 z&_p%!0pv-j51_li|L5n!@Cms7C1nUi^JPy5yzW)sO>aAod8HY`YT|5>J+a%5j1)2j zgXTyojs_N8Y<-4aUvjT2y2hfKWPTBL1>RkR)i`#SVE6LfB}8^d+(U##CUzIG+}05W zO|Q}R^v0{PkdHGOOoiEx`>H5p?_~Wj~@4^aPSJq?jgz61nEG5QqjVDg@R9Y{er- zc&}N84L2*f|Mk6x-`=*BK3FozF5FOt9sW$7lKPh=-KsJUVQLryxK5clAH~Kgt}9HqJ!Pm-9!g5D0bYr z!kTDAOvna@274i_fSE0_I+CMBGbNa3H^Ghm$$$14B{oN&CykuTAK>0}JNjD)I)c8vouu{A@ ztf^9BMu)e3c5pa4c!l=4*TP}@NKRig5!vyQw9H!xZkTuf>~z}JK9F07Vl;5t*g$9@ zyEL|jlR-UKKpd3r##n_S4DZ+|Mk!1m;^xRp&6*70oAboEA?Yxkpu#r3ID7K^7!*~9 z8kfU};|c5oT!-?n7{!D_*O0FU=+4RMdEPyLR?DKby7Nq|=|ZgOL-FJ?k$^u@h{2aB zO}Olckkzdv0Gtf>%!@Q7kUS$~NvgjxJh23dnB0zVcgW{el|YOH1d=C@TDQQ(albRT zx~n93QzOOJB{HYvgTEUbn$`7FE=Eb8HsFrLkl za3N!a9zKtWPl5gc^GAwcl0y?srMCm6ychgoavtC@260^}R`U+Qw0YBF)RZ7=DUlgA z>Sq`3BKSZ}fpKE;(vp<08h9`ki*M4qEf%*^mw3qpZ);sqOoO0N!$Q)Q(Vo{C`GSdL zTH-y%kB%R?Zk(>OO8_x}SL`T6$4W3cV4_+=RzpIWs&l{iQbi;|YS6ZzyZ6cgDe$k| zO45+vRWNAkXGG+PuuHWsX=ZGVEunSFN|Y{zzeW6Dk(<@tCnB=k-`z#@gp^4U-fWZB zjhexOD`2VO7l91N?9gP@E7O^%@JHnyf~YdQmK2aRHx#OWNl;nWbZG((PA(6UH;`9x zN%Un#X5xiacpYVKRhF480L>uo^O!1Hq0%IQLH7RWgc~CB#$%W3l zT-*D*hXkXM?k*uQip3rhjOyf)(BE7Z*xuEj>v+a?orR^%NmhynG$9)bxm+yQ#d`xS zq&snG(57)BwirZBfosR7EcV1rV08-eQxc_=;Om(Ey2hFEep~*cfolHpY2P2lh-G_?Rht^>+^nBzv%zj^FHNIX^uPq5PHVztY!~l0QqHhwn?@;@N>x{dd(! z@Zc}MeY&%u(x(m4eq&M%taeG0LYFiQiNVnJHP}5ExM`k2Ag=69R zu2bHyQyE>yT?&^&AT34t1TU~kImG@mW9+q{9GiFuX zF6ySJU*MD*3Hs~e3|*CQhDo`>S_+N!q?1;~*dfZSTKr0g|Cc>03C=2RThPB$(|>uY zr=@NL)P}}o+q?xcM>?frjSW?+4%l~2S>z0@GB%9;{b}Bv*5{mIQw+~)R24PmTszTw zn^R7C;_8&0C~;lM*q`Nc*+zs9LTzjoR=L#t1s zTkd_}6npTo&?=_JW1{Ej)1q>2bW~P(<>aZ+^Yo~woEsUHRbDwcB6^-49+h+DQCa1clV#EK z^suO$bE2}!D<_9W&(lMqa;`KgtGse@aP&MqC@SYpiOMRkoE#WEPY;O7x&BdE<&~5D zqUY(pQ90KqDyzJ5vUl`6-76~RdPZfHS5Df|^K_4>oa-KyRbDySEqb2r8kKWhqO!^> zCp$;a(tSbZbwvBdFABqqUY(?qH^xlsI2nJ$ycK1>FrTDw=F8GymE4D^gP`f zm2)joS>=_JFGtVQTcUDqb5vG&<>X7z^Ym|{a_+^btn$jq7oz9s|A@-De~-#4ubli% z^gR81RL(sYl~rCjxhZ;{ZjQ>irl_p)%E`v)dHUI?oZA?cRbDyyO!Pe65S4SesEl9P zACw~<^PyaG1=YA2DRbDyy^XPf{XHhw~Au6l9a`LI@d3t?R z&iynhtGsg3kDjOhEh^`pjLIsnocu}jJpJRSoO>cFtGsgZU!&*gA4TQd52LcmD<>b1 zo~Iv+%DHt>S>=_JYoq7sHBmWNAC*;JIk`G|p010^xksb2$}1;VMbFcZMCIJdsI2nJ z$raJ_^bewP?%}Ac^2*7FqUY%cqjGL}R91QAW}@fmJEC%~Ix4HYax$%-lXKpaPTy{pHCU-a>q3cV zC5G@M-U{BG9>gHo89IiuB!(kyBZg~_(N2g*zNurh5w?{}IBHd~ZT+@uoxXmvi(|*@b*WZYzmy4X@hT^(nf%na>PA9ph zOX~DB8FxzL{t;EDuViPzW$`d=_>cHTXp(cYC7u463h$%#0>_m5M~dq7^|z)Im-}?5I(>aF?pXTXtkc)4 zOvcT7CF7QMF{ePk?_8&^xh_s&LrGns^qEXJMbhUZGH$M~moRRwSE)L#PN!8Rw)IW3 zPG4Uya7yIionl5rW%l&=vI(^M4r^~7m#>{x{mv)79U00Quqbk*gvxwOn7ro-a z8^p3o$C8?N)XG$`Rc;qq%28E@J>^cL&Uj4OQ;H2oU++|P>an10yqgNzrfnMO9z+I(1VwDizE8dyz8BjD)wK zpGqxUop7y1v|VgS?uOh%qV2u~$5S?6v{9z5>uu4ilw zmX~FGN@PX-gE_3hy79d$4`q-+azF9Ziq(D1#wuktja8YZnaXUQqB6}{Wp0|IGMnmE z=9$IH+}Nlx8`mrIgPR>FyYEn!sXJ4Btsa4HsJdM12IkNyB{$Ko8?34?pOE9xx3Ikj%&qPm)+s=H=JRdzK`HM(X_ZRlc-uI`cA@}f7 zQZ0Q%>!P!D{)~HMG9EljSIDzauU)V~@_jW`|Ag*|1$n^S@}P~tNr!NfXUQ|+Cuhu) z9alQgW_?D+!APLS97iJs%p($*Pj#3MRZ#+SZ#{5bRfw8rHS zI3y;1*-J=1l3ZpDc}!FCmm9CwWBP>LrR4wY1=O9#oFgB>c;NrAeZXJ2S;Ds|WyMn0 z3^VL_k+QQz@JO8g+GPyim}k)Xg#6`6dB2b4PNjcG@>D}FHoQ1^fJ5p|E1r5jUT7~s zmg*-e`XdQPVC1>C3S_3Bl9L7K2xDD0jK$8&%qLhQ^WSq?NiO z9zP*J2!DB2J{&b&k2Pk+kRxRLEbv>TbwLQj@QTQH_9!~$3>~K539mS%t3Pq<@R@?o z@^hbmcFMcQ$Zf`$`&%c_*uvzJQUx+Eq%lls%*nAdpVxYu&fK!3%| z@;G_t2F6BzV;aPU#u!sf=qB~s-f8^Ei=+F(Hf?>akDM`v=n8Ve)kZ|C+#d9V=ollF zwqhGBmG-jq+hx5<^|oRGe=Ae-8{=|@E|Rgukf9hd6hlT#;ipVlr4h?#l{Fs&bfDe8B?!iyZx9j)guj*4L^~RS5*UU)iC*H^TOx%6qoZFIK8!<<{;|&gz8e ztl1q4eY3a1F}xxEn&uG=Ke zFC`4)9(K}8?Q`*4j$c;jPZY99~R6J(T}xyky3;fzL4jk?%yMtsf4 zJZ>4OJBqt_^U$>-yN_2Xf5xR|>efpQ8Jmr*z<(&RTecgiK~{;qe56WUP*h@fO6qqh zRix)h)+xl!$lQjue03^jbxA#VeJ68mobd=xCXpvgWzOrP%t-~xTUx99Jq3n2X}HQv zs$iYxJb3E)<96Rd!&^4raQ7A({_G>ldE^lM(hHk1QMG;h`Hw_L1^Vo#C&)84F@~Nt zm{S8?WndF!-AT)MIJY;4b9)QEv=PWx?o^rEK>m|CJo#SLuXr^FkE4eIS+N@T`nR+wdqZ#Jp(SY-96s*P*`VBP zy>b(c3f)zrb=R#=sSU!fYZ_k>ehO)630%gab%$MpF0#ZnmWJ=s$Xd7da!?m~Ykmx` zf&I+I@%sW}T}u?>h_b<{E2<^C*9hSUXZZkmG=!-``-NGin+$kzA>sdR*|GmqnLk1Np$O zDhS4%o{nxumsDaKs$=H))d_p*9K&0(Sh;(el-Fmmvip8kxqAx?yH_u@p%A&5U-+Io zr=%>>sxr=N58jw*BI{C*DxQ$gzpRO z#Cyap*pZUwls)mNDY{H}IK=B*|GLi^cGUt??3H`nWk%||>+ur}ZPOy%CV7BrV5O-ig#*A=TI*IPkj2c!8{bO zK87AYx!;_ZDdSmdR#nJ5%X-hfWsUM$vxYmXRr!bNmA9lunZqlgN7nFnwJ3jAqq3*g zDqU}CZBXwP=taHE@M>lEfu6IrDzPD6D{^~ijk1NtyLT)1@LGAV%n=PD(}ufekCM9f zwE4=N3yf*V^6bOPpSw=Wd}ai4*>}E{ZK>;Rov(a>v5jZw1NX=}=5@Zx46Qst57^u8 zQ0}e3*mj5EUfb93k36c-6Uua|4exB|3ho#MU9I1Pqv z^X%%$O6q!>srSL7%HG1WH?M{->XhacFJrj7>XbWk3i|lTLZ`f;&>8Vkp)=}@LTB{* zh0YkG$SLjK34flrx|(>mns-konB$l;`bm6Z{NYlgP;>)zxQafn40&3uHOs2G$1m!= zzBl}>Ok%Cfsa486HH(kcsLWB8kr`RVdUn=;_gT|!H1H)mWHa!Ua~F9rg{{U8StZ&A z1^4*r*-m-)=rAk){tVt1=e-yGm4E+b-WTP)zl!(y_uu4wJbeF1*neOHy_nq7KRAhv z4DO}>{CoO8;a>XBe^37>+)MxY@9Dqe9-D%#m%b`Qw^)ty0v%IT3w>jue*cd^$3f@v zN_@>HnUe?7Jg`I@xHAL%0cz)!&U1!t(bd!IU% zx@vcqI-WTOf85&z-&A$?@cf$Hgq#<&ZAG^K&e_ygkTZ;!x5qgda!H<{JsquQ>$X?-|lZ2i%k4Jnf@ z?%6qH&@#N*KFn8vvgapM+p@xsyo2LZ>JF>KD^Ri24Tpw$&@xqXu!mPr%JYN$y@GBk z^}xZQnc)S>Nn`h0YRM;n*R}$~%Z^h{b%K6ck9!Gpet|N~brX+^uJ=S=JX&+y-y{CQ zL9KJ_Wyt)xrsLX&c=RAJ?m$maZ*2mb5i^|CmLWRFTZZ1l*KpQ=ZXoM~wNP-U)b!?}rWeR6NR=8|GmS`S#QpQn=e>DU@cQAhL zVEo*{__>4ea|iQ&Fz?w1wTgXFPo83)j_*9C3jZRD4ro-FF_vMDs4_Ccv*cA);b&pL zdnVM4XZ-dCyZ0<5xe}+mf!O@cFWOf2D0RA3R8@QnAMDsA18aN-e+B$*6}#5I z4PAbLPtm2Kaq4FoXPGmaaCUcfJ|XgqVBZMDn- zesM*a`4h(VJ>Uap#?#Fa9XljrMl0GQK(AFrstUh+5W8>HO0x*v4z z4*YntiozuNWZ1P$DexoK42aP zKJxkH)r|KA;H!%IqrZmc=K^0k+`p z>UNn4)ERbv4`~zN(<*R`0H-G9UV|?*MoUQzpAvAq6c{=2jv_I|IZ z{nS`q|1tkHj^L78<>Jzo^Wk&5S)BhvwM?9H_ z|5P)tf79JX|3g;|jM^{O?fpMUyZieEbj+H0{hJ}}H5}c3)T;i{UiuZDa7Hxrw_9#t zo}VDDtH-DOwX&C7VfZugx2x83zrwJW+@{*^{l)^rKiFdUjR%#FEtVV&{dRM$_2eI? zux59<@_M}+z?!lX{yR5BkYQIr|K^X`|uZvfJN3ObbE}S}rCp}H@)W~rQz7q;O{C(J7qZt(J^@^p2DrKt!F4ORE)8&%d-pu*9R}CAT+chKh@<#} zo|z`Yo0{AI`sH5BaI9mFGQ5zGJ`gw)~s2S6*WHsoUvyuEsNSVFffp&y62$ z*gGFE>_y*J?u~C5elu-7@)m7d4ELYEul(`0;qM3bMjL)&z6x)Z_Fdh=y~-~*Ld*lc z-fsM9)9|*St5$+9{kW5ErQcbGy%K!Gdw={>;ChR4Z|AzPO~Y~vk0?L0mi65fb5jS; zuO(mO17|Y%o8!pO!GNw8%w_GXvX933yxHLFf%8ooXSZq>^T^!qIgdQhQS{#%z5T*I zjOA+bK0@o+(Dn#$DnmNc-;@!=GJEN7o${t{Q}*Dq4gcD~hFgU`oqnxh4_>F*@BK|p z%D=U*;U4F@i8fX*{*c}I8<1`IcMlod-8H%e@DZ1C(hD&Hh)hoa(-Os-P4bOYcsMs_bAu7&|C9$mw>P74>|N6 zK(2N_qrA=F?TyuWGIt_;y&1ecc=+nc^bZez(K7rGrhq%wXULl+rt$}0*KCEx^!>mZ z`1%9dJq4VpLB0)IX&PTtK~Ca*TbI8$JZ5iM0uRD-LKFBv@^t>2A0WFkgx)=T6I{R8 zkN)WQnI6dGWP#JgzvE3k2Jez`XtP`QVNY(=^60jusCzZ^o~7ln{odUO?Qfc;<|94gcHI!DXo7&z}yQ$}awV8ysuEahA&+y%EvGLuzY2AGoxfk7yo<(nW);2M_23rNamqPE|!lTgJ zgWj{zJxzzWhu$9a4)6Wul;I!#P`UfLif#gyzhDivs}a0s;XAA`+?i{TnWum`Rm-Sb zMc!8Y)APoe&Zswf>hi>L)7uJvd$(xVGAH<%%AK`acwwM>eKY<9`+tU34se@#8SbGb zOfvrT*YL-66hDEC?uzaqEtH+{!&Z$+OR;X0`=c9%J?@Je5E z1m#KVOmCY9&5`eGZSd|bYYmKHuQG>0=NsdOZ#}L2Nw1Qh#CC3i*R#EVV{|45tNkCl zbvS+OflixPYrwbhDzH5PEN|OvV8g@Vy+3IzIQKE!o49Ve7Ck8Q2TkspV|Xpld)W`M zJ;>!Y=E3dFC@y{FG{eM4Z_$9;zE3gMw;9K0V1AI5r_H5nOy^#AI ztR3AOBi_5Xo7_u(_Ktzn`$)O_=xfL4q2+6gai>k=Xcp^*wbvo9<(2N>{Ip? zF1T!=&5Mk?*|4vuW9`Jm{(Y^#e^ImHW*B?Rb@<7T;a6 zz3|@O*rfcM7}qhb8#kis=Ai4=V;c|R_odL8b)nzqGtSBAp<}{F=zH|T3iLyG@85MB zHV=ECeNp)r=m4PD?}myA?XE5dC{h`*hw`=(GYlh4+4ui(X7=JA@4aC+zTuhE9T$ z)~#F7tt-HZ`t}ZRS`^~c4FBu^r$r%7+`AXa+3@c~w-&WxvrzH9ml&DT z8+v%H#09f-oY~V`vV?sUMo(|rcZu%~u})$1@|GgILmPV9JD9^g&B#_|Z+j5(JHqJg zeFfRSVFhcI)wcIC`+=6ftNd%0qjRf!+A~;FKjj_el@u%Y?b8gN_42+-okedd`_33K z<4*-{Z|`?Q4SV2T<$mK==sLO9&8g*jw!Bwv ze2L)}zk?o|i2g-hu|MEE&@aG0C^)9PgOWqiI?$Nhyg_Awa@Z%=6D7^QrHHW z_ZEGp1BTn_pAD}|XYBH-KJ7k$_VWvbm#a13==imD6mX!^Zs5QCin5n~&X9TXo0f2Y zJv4b-(?st5XX}-J;6ddc<@)R}Xv?!2@Vjddc?5V_e2G1KpusPZ33wUYBrf-+J;eCn zqZYfg!~sA{=^v7TZGID4)|Rn^B(bN`@P@k6JFi~dhS6Ft;R;6hx(xxpp#p* zn0xe4KlD&|?>{>g*;)#nxI!n_T1*Z_WFFliJ^(Tw#GlYJEyTO zQ5ni|Wq#Z#x4peZiwyI0qq{wWJj7eWuv>`Q3q<1Jr~ z3^xq0FU1FV`+VfTa-ekIyUMn@D)$d}Q?I&@_f_hx ze4Y6EX=&G2?!6xP0dM{rV?Pi2%`@DK-X^Y`q3jvh{pR6@J!7mMgT4I>)c zQ@ho07cPZguO}vYT*pM-=3kJvxRf~SO6W0-xcWh8h+Yow-A>mb`$fcWLk9TIz)v4s z3VoQ@*kvO7#r_>J;Nr(@#%8R%DcAWX9lvb^%Amg4~C~_9}jgIc5E;>g!jHV2b{lqvh0UE4XoCo$Ud-lZ$b7q zgWqR@JXq5$++WQ&AJzFOpL>5}FP-ahk8>qI<=5~GedK3EhorQ<*ZL?wKPCD|?EOly z_vEX%_wV{X_8y$Iy`Khcw7m~;3iOe^Qv4!#cV{bf!Y_g@?swm0QwboU~y zldzF}#jYcZ-R&#U(|h)y1FHMlgT>FU?ry(=9=`D+e1V3(cK-*l`Nlx+(%X>nOAYT* z?D{}tSA6_310NoF@4FX%E+lSQCNO!1yf1r8dFePY*fL-m{k+$({r!jqu3N5seZRR6 zF<)21pEQcGoF!|==rkD@a!S*1u{a=ygC;Lg+zk4sa#85WLE!tOp9=woE+LQMr zo|8U*q}=EC;#*8&ugEFvO#nVItG5mKD}SeRkbdo29kY7du=f|?d)%`J|Diu|=bzxY zBg&rsIq33A5bI`JnCAlG-^Ym?DhK$R3Jmw&UfRFcwtm+J_!a+t8MdCbft^?m4Zovd zxp)0DG-EEqI6u$EhrB}jDdoi7@Z`*&(RXVQ2VPr5JBxm2F-G_|ymu#UWlvqg5If;c z8iAd#_#C)o{tY;npdgo%<$iaS1&zH z$L@BbvzBe|a)BP%3wH*8R3^M$CSBi}tU{4tY-Lc;@AH$ZPgI?RA zZ8WXyOs5szSKR!ypb>1c{X*o>AJ4z>v4KJ z(K+`Nf^+v%{1+K_*Zs6fk>ja@#{1b*O3b-@a*%%^hiGrX1}(oy=U?2rt}$41=r6fN zcjIM>JR|uGWWoG8`$wt^UDJj(`;oul%o%!|IkRWLucGsrufQh?b$)p7J|{9f9G%Y< z|HiMSTss?{^YKB+9e9tS55Q>)x@Gx{054gS*uq>bhrc9G6uSa_GZUO{BFA(cINgNJ zzZ#q>3;jEKP)6Qbz{vwA4Qnf~z$wgE*;{4T-$+h4Fj{C0`oLKJ@IvF9IXuqwD_UIOL zn!UY6*$?5@Tz4w%;Lq(d4f~;b>_BkuKDP%ME;HN@xt@O=dVU0d*V4}xbPM{g<>))XLGow$xw*{k`kA{Ce^BS*TyiuiaB3(B<_=i@DcyoT*Sdvkhi;ig?z4@( zMAiN6t+#>K3jC2a;&o!~$+y54OEhkoQ4PKA?cZh059%?)KLhMnk>!V%u@`_m5P3HH z2jq#6QTwaqhTU^F@%C!N{vEb<#XHz#V)7fF;C_VRJ%}v7^Ef(cso{>#5LZ8ExDzge zhUcJvhHIIYdDMRRg@GKq6Nq;b&G4?R+%AI*H$K7OcR|F5y^uxh$n3Y_-LZz(zXdrS zB{pFI@hyD_Jl6WlSM_!O5nkl)(h zCBPH;M4q$Ab7}We+zGRZ!E1uNv#fc}YNjt_$D6F@AXuCBfCn!E&tGtk!Tyo~dX2gn zc|P0*%xSF6zb*1y;1={jHv^-!92mQSw~_v^%i>qUU$S0j%UZ1XmEpaMZg=<3LUy=9 zb2mX**1J0&hPMBVUjNrH_WnQQe7~x7P7r%D&-VB66|gt4Dc~XY205PlXRdS62_J|& z7j)R0Y1kXqv)w&!5(9ygtY=?6S>rG3*|v?n3Ge-960B$8Q|{;b46<0j7{%AUV*`32 zw9DFmL7v4f3l8`y9(LIlyDay2eJ}7|&I8B8VwdM)13naa4sik&IY65npg$9uOAb)< z9&`!TP-nweYx8tWD|u|@>pNVbljs=t9^~k*0`xKREctiwU&8#m=o{_7Y}w)>-d`(A9}d906%G)^0J-LGv5a<^4zoVIi`OPxDRVRh%ejMo;-)~E)HZH zn`et%UXCoI=e_ONxnkZEkP=v)M`Ik+_aC@04CY()4EiNXxPCK~n;Fp&WDX-u)Q+HP0L%&)rSP z@e!WkpSp#e(OcCaFEEF!4`~}XYYVu;pY1kK+lkrWzc%1c?%nbGLL10c__GGRUITpA z`0&M<`!#_Loct8?J~hw>Vgn~HfrhsPaPB~kwGF(9btZv{JO_3;5!hw1r{#fe(R68z zbc?{s*DV@OGjvoA&4WvwUk?6TI8C)s75x#Pj{M7x{_Y+xID zY6N52i_R1q0NwhZ4IhsRb^o>S1$-9XyU!g$hKWD^#PxjqlY-&=AvYGfd&^A5Q?F@b zZ(om}IwgPu?)LV@@Z%f}$IlR}%6Oi8Cb046KSyrB5&zcmGq$$T-el%Zd@6iu?Njwf zw}6A#U34_v{C?ukTI1o$;+S{5GB~ z;CB~5^~(Rpi-?cE zL+srX91iH*g17xFaC(jGal{PAvWf+WjubC(WM^ zZf(FKK7PK<@b8*L+H<2vYk zgnbh}G@s1A31~syz?<#?2OZ13Tk{_h+YgZE{-!DH38Ky>o6W#%#mAckoHfLc@b>hlfHO6K)6^Th zmH_9L08Z?yP7s1*#i{EeHAIR_S z1kR@6tc5eS54Z~5v7LV5&+vnGVbf=mOIRD`BsPH4v>=zDa}rCzX|B#CxF&X!XYQmI z$x9S)-2@zR2}2v=k_YgupJB_1+aEx$=v=}!^wrsc&w{S@HeZW%Wn|}dRxAYEq(wQ z|BmvuBbyK6gR-uqZSgCoV{?&VvP2~A{{2t(+qjbF;+?nSGsw#p=zkF1+*kW?l3(*Pb?gNhK>Yn7@vg+P|3HlTs*Yzf zr&sfSzlQDY_#u9MC;WtO^%HpR!a8zI4FkN%gINDQ###!x=!$cQn|J88W*M+ zB6WAv>AF6)%$stZ@&-Ld{_)qq{kif6&tOe`C-hxfE;$PXDM6*;NC6RtDpJjm6KN@=h!T^^RTRc#DhF=rEdAjiAGZ`ua*%rvb>HBQrz zp({x=ep?#bnZjW2%HwM2L?aYn>q))7KeC|-|kC(Ti|ZPzxE#1`))F)83XMt zh^Yh@giR%~eLpF*pt^9>cvBN*ZS8nLg`Vx_1x6r|JVd<`sDMjtXowwA}Yx;QxcWy@TJQ z4Sj#09>@Gyw7rhK7?0tDQD0=XA3hrO<-IL3+mHN=+$WyZV|On^zu(6Fg;(&bNq*m8 zip`Wb*4}bDdl%jfVC`Vum*YRQ!`i{TFDJ$i@7)X01IJ!8{O@qR@EpCzhJ7~dXG2EW zcVhP@zMF~fJe7P6`%c_hFQ79Txqk>6{0sXTxM$5%p1Bj>=J)Nt;kujsY0t}k`Vc39 z<N$y<#s{lN_KEnLE2=Ih9&DXQf9{y(^w_89Cqr4&3ffI4CH)x-3?_IHjwLivx19NlU zR`ewDG8jD)-uo}0KW+mT(IcX}3$~Ky0jI8q7-waFyY&|ES`y-QGdgLJUUL(BWM4T) z$HAVm;QzN}O=^IwOMCrRhOuxtb`|`yi9mi|8HSu9zwi8`;fekI0Xgd5f8X%Lx9e!O31zT?as!R+t%UB zd7Ft@(}naol|82TGt>J3^RV`Zyi1Txdusqw{F_VG;wwytKN9$6=;H^7m$V-=4w$V` zz0LS#vhKX3}~ z-RD-4>pmTL%NY{_GqN%!SBb6dEknTrn5pZ?TWm(Rd?tdk{c3c}qj_+^>F7{$oD1*? zGyHAg>><$w^{3$V6>>G?BpR{hQx_4J-^_1vf_s1Baej|OOw@FU{$FN~ zqya8c7B~(z4V|)!@mz^c>FKi9@POpMSeHPj^u#v_@BP~+lYiOFJ`(aAN4a+F*=QjK zYQpZ`K>H`KZ!fd|F@iYavJEy*!gSs}FK7-1`&2>A+&vY7Wr;2!HVGJ+0vKJ;sGi-My1@ z0xJi2JGo!PJ!8Sf_VZpQzlDwUuVMdJS#@7~2DVvpTFjp}1KZmF524JC#)n4F5Py2F zoQD7W$H0HStjzER5Hl25k==dqB53jz=A0bX6mnOMYmh1I?Tb6PegXPJmzOKRdAZ&b zkQrV{?h1QYvqtv24D@Rc5To^m=7;bpdXl3W2hCaonr&K!y+F2`HepNAyRA0sy!$!p zWE1{_OO9!aZXLf`*-%0=#!pj2l6dz=~ogT^~A>z`4->q#hL6C*lV~4xQ4L& z+PUO(C(Hf|aC$VviCoa4O9D6=CvrjUzey5&UPP9TBX<{Jt7~?nuPgOcbfmXsIB@Xc z_1N%57gglJnGGCt8u++3|12Ea&lnrH2|gL*CxcvOW+8hi##M(b?qm;y&$uQBaGG{A zE{}2D6pV{||K30IHyB@OFt`z;+%7cRi7&Q^zrB+02+B3vm}3WbD8SBcWUO2-+!w+_F0#mb>rCL(gCDwZ$9mvQ3E+s2xMMMJ<^*uK zH~GD*oBa_v&0WF%{E3s5d#Dk9n96+%dp6|v1P#GEs|B7M!SC^yr`=8T!<;TXn|`)Z zzm3xy+lEGRs&i=9i#5*{&KmNTI` z+butZ)`m*;;M~WSYm`0HDsd94lzou1^(?Efj0~X&6c98;s4hID7D_#qg1g z2c2&dGR*Z2!YB41}2&ZEPakEC+a zpMHMl2{_951dhfrcXKA7*-`5J)iVP*14Gj=b!VbjpLGiDydrYm4~=6T{TA?;h>Tdl zZ%Jwn9p`)i&i+XpGe<3e=I2B6D$bl7Ysp!GdOS7lcqG3eb>PjISym+V7;h)$mNQVb zjHTzg#g}qs@jUqAd?U5+W>es09-pAh9|{juRkqzc<;U8&RKux4y&4ZLN}@e^UK+boY`lVSH?2s4Ms(uU;UZ$t*({0 zvSRC_4R%5E0{y#l?AV4wPb$tfIwXGehMGbD;nnp175Pf`{;cP(QOA9YVz(MpMeThn?SiF!bU$qWw8uB9jH0yrKzqsA2DW7^mKmDa2 z(Mjm-dcLQ{=R+&>*X$ieJSGZKutpF0_^FXS10(#yjG9da1 zK0SDxGiG8AXL)e`E$9F0E5D88Y!A*_%vAMy)lL}vZm%J3C#W}~AYjLUrg5ICE8=`>>O1pR%Q;B>1+H0^eO1m>ObxVp zdf8`#v(ge4-xT1iW+m`)W$pDgSSszwdERq4FR{PX)0r37XI{4B;EcW>+}rWUP2wE% zzCtIbbTR9+PYS*<6T0iMK2p!QwNkFO0vfApY|he#uS}jpyBxo-G~#-G64}Lqk7u13 zo~@T2XvbAhmpv%bhv4Oug4dn&QC4YrV|($twya9sXT?u=zf8_at_=IkUCx|vUu_0B zX;|&+uH%pSnmoA9XUTn^K8{#c!l%04gFoT zfKCVZ>1%neB- z+J9N=hZ_V=P}dp=-!td%lzgj=@7jgW2ejiR_nwt4)$@Fn=Fb!i?H7^x14vZ?It!rd@*E#b8Si)M^%gHC-zCiHgNA{8~2I) zI-?u-4Y!rW1Dz&gHViufj^MXPj}M)SKZ2j9>Cuk2mw;bN1G$F= z=>7)UBvtC2dajH;u|9@OSjdEhOjzbf!-7t6{P{TkeB3hdk(0m4rw+zHq+|Tx z7mmO5#`ji=pTe0>-5FCgy7_+QdWdPF+r(EFUgo=q@ruu)$Eud21C!7{8MaUN=N#it zc&_@Tx>$u7X*&;@&7z+kSxq~582y3HhfaZSAK;Pe)6tK7^Py_dN&TpvK|d!yPxnCo z#ZK-=bh5}KG-MprCNwmmA-iylxX>)*+1nh>Q_^z`k0RsDQG@U_IO;NZHgLvvr4h_k z`f+U|s~SSxls-*lER?hVD*Y0lLO&}Nw@OYPS3CW5EE5+UJWuQ-@lBp?<_tdDnitws z&OyfJo=9tD{AF4v|NP0c&VBg5M{9lNu3>i2I@kNZPwU*fpG@oIzW*6oC-;4v*2#DN zGOg3QKbh8Q*Z&HwwJ)Q-eZV1>5Qx>sz8UDLQqpWUtPeR8_AG0Pj#J#wZlI%rq}a?H88 z+D;^Q$@`P_bl@vjVY?@YpAnaDL1=x3?RLry^mw~p-1w-C?F{|wA^3mj48t_b(RZTz zO0jA3?TFRnJ05*j>uR%p9{xMA;F`Gj?8GSGrEx-s4_!@}=k%xj)~dzm>s+2)P(K%6 zUekqm!Wl+RsJxnXayGlRqpO|LmJ{@IyKWBbORhamdNUk%M~o;rDmz{!XN@vm(RJWc z4t^sHd=EqGcF&UWqNkJE7vjvh2IioW_{P9Dq3*EubBh`8P{v!zxtD^MRkhl-h+9e< z4D3e7cb36T&!a<5i?b@Ri`cwjRe57i=Z!u282W@5V{!Xf>z$!lfk_+u9dcs8)A_Jq ztmzQX+?H^xf6-^FIC}{Dd*{FEEhvBv{M|`jgWQJradwuogGaA>CG|{UT<5>UFAex- zE;+0&f!+Hw-xFTbyqIeeJc7FTHk`Q`me&MyzL>mYrQwuR^BpVlKlpS)(~1`DD-IOi z4eDnf=Q%dD6q>=0@S^au_?6m@mBVwyVO|`cvE+U&8_e5o;Bn5W5%OyKP^PNdgqI3a z_mH2XYz}KM#s9!pDhz$4Lcv%5GF9-!1K3S%4<&9CUjzP#tqg|qhMc``#o87w z{sT0G4;wVUw!K&X2V$QCA>3a`f9(0|m@DyxrEc4MKmCB%=>w5^}Z^?+9!r{n*%$1hKb9@M-l{@*aotDGkz z{2S08S~J!s;mv9z{6g8jsAsQGSTeS+Lopdab`r2JE{6DLkD!`7EhFhm!Aa=d|F)MHiWh`d106XLGSNa#BX zpJP;|d?!lBV3|?mnnx11*OP-M9@leRe?btpuenn{3+HoO#~hbXzjQkGg{F2{^KQ8&5{eg}lzrz@Wk3*faSNk^j4aD=ovqXM==Ube| z53NO)1^Vg=k#WXwf{m8B4dFKkeA~K;KIGb==U&79>KvmN&+axG<3XI?V?DVhEmH>d z#Xh2A8i+YN+BJ!cXnWW5#GC*)==fjDXJF&M2|YfH_i~WdqSEIw@ip?m-$Kr-k@Ne-7Vy2NC$;~WTA1kD?q6-_q)NTJK0NMa4;}Xp&N1Y>L-x{f z?6;Vx%yk9mvqJcQX9cy#z1mvU*1O=C&?xoRnxXE3HOW+>sHfd)EPIgFh)y(84;OK6 z;A6>DaZwNb4YHDndOgU_mO$4ca&xQ&6|wgLJ%%o2Eyy}%K0c2;%>?DjTF_NvyV|FG zR{5P*8#eYHQ-TCh0-ok~dt!L+8+*dtT z;_31JRJ9d9_MRK(yHjPvFRzd7o+%fbGeOCkonJE!TDNN5E%a#XU$hVU@ZGX@e9#5j zF6I7Dh|hasPtp0T+i6=GXYS+JmpF4DM+cecAQK&Al0P#ur#8e)@?DwHl`-=)BbGU> zLHvD7@;+TnzHf-~@0i)YLmkO8|U+az-l$Uw4-$UrFn&m(KJN2iOP3F8slYJ67o z0Y0$S6P}fQp8R-wjB|5G`$YBy(S@OGX}`9kzigttzk*N)b;LyE?0`K)uOmuqV~cH8 zLqgju_5$Bt>*sW3XqVy3vXkxd%XxNL%Z#Ij8L3(S6}y~!r9%#xuRv#~w}*B)plxWE zu@ySjVxHK0h7Vx`Yrh+^_pS7@i#Z#Az1q;onp3u_S>nhIbL_)jcI@xPhHofi{V7{E zRs4LJw~7RFlbG1*)dV_7f9o>PL!XiNV*mACgEI7#>~GM%koj9Z=b@gm3k#H2n?Pp< z@oqr>suuKMU<(SEhotshXMgHE{I&fDns3wd{(rImK^UtIHVpL4O7B3IG(237ih zbpL_IMa};&?LSa@&gbUsKlop?Yq|Okd4fjB%%|A3@paJh1iZ{OS?$N`HPdUL>kQU^LOX>H)c$Qy@1NbGQS>#;&^V?g zcF3__B(VW&K_}GBB{aN8!|^<#$8&;y!4B|yLwtf!l@edY@?{@ekKE&rfw!HgIqoeP z7wYS(uBm$x=)@*@&bnRA@wWN#W0^9(L!!w2!~>h5`8J44_ztY>wfT!Q?U*O&51)ei zrP_BAy%o;S(UW21&B@2s9P;B54YNkRPpZ_0B7BquM?)WF?0?2b>EX}AN4XK&KNk z>@Dl6eTU);;J-3_hw{*O_yxaNrv8#Ru|O~v(oSqOF)QCyf!=Y!6aQZ0nS0Ywi$Y(% z>MgN{$l70xWkMT`Eo!&X>Tau`BlEjD|q26Y;{=04pguy+5C_ylRa{yL*W zhh?FMewO6dl}U-!|0bW{WZh=ZgBPtp&uD(@keg(a^XNQi$(*Av^7Un&{B+2l$h^cQ zdJSA;@g8F7=i`ZvZ%s=syS_%H_$HQFkDS8S9(pqz!%3|7hv+l;Hgwud z-5GsXI`CVWFFkH`UR$B{k%w#weS`Wr-PRM|k$goy&h4>_)>X`TThF48h;=`0>toAZ{I`!SJ>}%FiJlH~M%#rS!kFe(az=5nnW=~Cq3r~C znYoQy>_ySJvzR&YS);C?fw_WTy8M*=T?xLEDfE?mbX@o+M*P$9UG6})d}{9B2=h1R z34Wm-Iuz)yst-Nus&GG>x;lDKE=Ba#s3+U?Yp5gj~w|_|N$FGRF6G zu2O#o8hJcno{>XSXd?SSZ25lSq_qjgEizdwGA=%fiQR4AdzG3W=Q~kDs4r_!Dk=1^ zi&Qd@vvfD;m~b9JCh-Zx&yjDUIqQZQ&f}C9@<;AV@?ZiNzXE!agB-Lz-cG;FFyce@ zGJ>bh2L`mM+8fZO@t|JA3*v!?_1ub20vYtS#~R581dhnRXF(f@V@kxA%Zj|CkBDV5lGh#oS96vX6+`%D^zc`m*!%c7 z@J>*{(yM z(5{o?(=r;ywM&m8dUHt!Q`3Jf7HhKls4qhJKCr*8s}cW z`ZG4~TAd>}$o|)C)ghfDXnC}Ou`JLzf-HMsv%P-Ro+D@W{+w6-u=9GjwS8%zF_wI zuaEZo>o&Wh{r)Gx(Cym$)-aOHtHcP^p&yZ}ka=c~JJyOA-^cSp5pZxYOT``l6XK87`6Ry4ZSwf$BpAW(L_(e|kiL`HjCtB-%DxW# zRpjrzWbeX^)ly+{${;$-eaugu(meJU>y@bW7q^) z!;Fg!Wet-xhp&(mm|%Ddo;&W2J;V4k9ZvimBM;lL9%TM-0&@+#|4ZDtz(-Y{`TtBN z2>~gfgG!avg8@W^VeS{#+C)LIrAigly0&5F%nYQ4BuyqMhOc*vBO{STXRwdq?TBTSp%-YG+Df{n5^@z@)d zz3_6FFh&KnHC3 zAbrCr-y7$yM}K4PgY8)CIbP{+oLv!plRh@~Ssru#cEO)yOEdMqGaRtu?#jTzrgwiI1@ZdD!<~ z6(1{oy3f)Fu_JlBC$Fa;G<)DM+|@j8P}wBpj1cm%rZ67899vzNMCpcy;|k5_lwv*>V4NT zw|Zs4-}K$Zdi34bAjc+5@a~YaRm+-<%kQ4z-67|vma%>&cF9tGH4a?+G2To5DdZw! z7iF{NH9KYBYC(9c{{9B^xXBW)SK^&G0sDc(bvN~RpjfEeM!m`Yk0If=m%<-+{{#tV z=7qJrgWIjV$XcFdCs*}2c+3EM2(WF{kp}HAa}Z}r5q-+Bl7Bow_!u6c_I=J1+ zkCaX7g|;)}J91#d*OB{QQ+g4+1|5$r}drn3(b4>PuQDvpLV;4G05|bcDwennuoy$ zqxLnspV|2-*=0_vr8c_aW=yKD8cxt0jMjj2}MiE%aAwUs2OC z)jv1Tr>?DY%x%$KN_|diWFJPo^h42WMbB-VQ>RI~*!y4XyJOFbvZu`#KZ-N^uW+yG zbDWhLSKGLK&x?(BJo{qfO!UCnYX4jERMm)0FCbDqZXdTF2>U+-;J z`oq@mP5IRSAB+u?*s~}73cH+RzZZKC&2;yK%{dkJ1k3hH{G5G|v4c9rj=?;ay#VZ0 ztZibSlXHI}=LkecGS~3h;AgMcPmN7CvZu$xe6^W9YV`em)>#hrGtp;|Yt5y-g2oLy zSd(7BSSI=o{ggT%w#TX5*0l2=bu7BSJx&aYeWKRuSl^~z)!KC<`}b5?M%?GNhdo?U zHfOm#YF=uWTj~efctZNPH9x&p>N_68ZZNz4MHz2pereoP&wJ*Xi_|atK4~j{_8~)L zZZGumk$!Y^qwsy-VX|+bZ}vjYI?=bF6WfNbew^k1*hHHzL?==0IBVg534a?;?Ldy! zVN2lml>4XnYSnl$p+FhTvq9*cQ}1Vgm71$GSo!DO+>a3dK3kW)-aG3NwFlBGXB@Fr z7N}37;kkOz-;HCQ!=6UDn7$fQpQA0wBktyyto=rGTQmM9&L=8;pKq;Xdok&Hf9j(6scllK9t`^4maHJryR%N+rR3Ve)3MXmSo@vS9)ev5y!RFQmu*n<;bm`pnRW8H zYCe1*I_siqt>-ssDcwYSNchx8UN}QF zQTVsalY_gFDTfuL4@`Z4{mu)~5$In#=wHljN0JR@KRoj}@4_QB;U9S5O5c&Qw1NH| zTKp*TS6_dPyh~g7LDq<+Tuotm`(*gS@oLQ;_=LoZ#@XG<{pj zVfBd-<(9OKDhKI%Z?B_WMlJ_?%7{nw8`@0C;HG^dYnXqrZw^_oWzWz#4tZzaF7?b@ zUGj&$8oOnUs)LOSdsO?&884+j^xjO}mG+>(S0ma4gg=yyuz|MWY^?Vrk%_d$72gwC zUq9@uoZ|PvJBOW#QSME5FqR+1o^xqu#scbo+xBvtpZy*>6L(~6l=}M=`d9Da*u$}f zBexpvnq(X|-k~Fi9?@jUt-)>RGE+sTS7(FSe=W8XIm@?8&hqVXoaHm~_YW$6!`z#0 zA%DZpqBZKXJnZLY%%hzaPF4C+qb9b?1H}Q(E~AT%QV&fxk6aIfH9O{FWb%`!KD&HJs^Noglg>P8v7k+9y;V!=Aob&gv z<30J;;Gc0W{!x0A;uXa|C4GO(pUyvnb;D$h**>X}>#Dbf_L(+PT`BpMqaO+XY^|F* zx{Mh#WsKS0mq>io^G)wXBlC@RA?E@ox${+$F&5t_o?%`lGDhx47*WQU<^SX;UN2>RGHqN{Yy|kWrw8X*L zf^9pjGyjY!n%GeXFAzTaE6Ar`l=#aWyD~%N)1W1{n%e&g{Pnk^)Nk@H%wLfY$X~%x z_$%-i=C4ymDgR0T2mCeruf$*IpVs(i^4IC3@Yf=Xzf4;kYr|@;KB#P*v*i8@c;B^t z-oNgHjm3lC9h#THXelrDTI`T?2P1!(beq08G~Fh(?l^jR2Y>ySNq6w}q3I6J9=p6v zhyF6@Hr+Bb-KOIm>6UC(-kG%NEbcqQ-Yj<*sd(m`hg$R1JTFWSM7I9caRVC z_WIRYxPGuHd~h$nHx`Z0K36kP_kb3DfV1iKS}%8;HVr%g&S5j1Uat*sH=vxg3D<9H z8aPmzTdH!KW$W3xOY*mI;or+Q_N`lGPZ0M<*?YOvo=x)kPUGyu8`Qogc(*W4BVUg+ z$Ql4TZ;fvpce@?g&;Efuo&oOBynXU>?-zJ4r`X8ECS6#4fcIK!-u*y@n1M^)LXTA zYdU%CybbP_yh)qOIc@feVe^!}F6%t>AFr~@ik)qk?Toe8VdvoFELx-7kyEcRXMO~} z46twJ5zchhdKzbXR38@mmz+5?dM6y=J$Zr0XqYgq@1$C_rtGWxJ^a0ly)MhxbA2Rh za_4BiV=iIO_XLmcuqo>PfWl#Qmw4|O&)%?lfvxUrudyv^;JJ8r`EMpe^ zN#=l@l@j^G8C1f4?1P2Ho+Rr9gwrIg0n(B=0Ci2==9zfbL?;%mxrTjp6W*tsHT#d4 z@FsZ}Cu1ghBIj^7aF;V-$MX*Dlg;_C#N}HSRdwWJKf8A}d+eR{G3!U=`Z$6(SU-?? zN-0h50r8EOG_Te6ACdf{jKjvS)Sl7WLM^-?`0{PkE$c~JBHBRhjgGpet?pn9u+QQR`>>l8?x=sSu=gm|U7v+-4{~ndNcK?IzfZY13rM^ZrxM@OH4@kU>2<%Cb171< zvZf6Uak7ri+NUKiZyA_)BYcEE>k{61=V->8_jr9h*U5c-6TJ(^tF?-OiT}`SJh9^l z;+RStQ~ORihx2XMU`sxXwi-_#Bu>^&eOD8&CiBE5UHSp`XVN=t#Q7ro4b&NG_8Zjn zo$`psOWpOcN5VS~J!Bqz(z17X8=qvHB%OYE%CrZMxR0{W+JiG{T-aJEC;j_2X@76u zC&rU5<(PX7?R6LTz0rrXR5nR$ z+;h3Vw(foQV7;Mi5XaoldwHg7h3omeI33;_q%5@eMEK82+k4V@WX6%C|A(TX9mbuI z6HE1K$0vDXFU7A%&l~I5(2&2^`er{hq`qVgYyWX|uME^~ZZ3>}qv)%BqZsbr0G~zc z+-do0r)v9a>fR6k?G_K|y*y%E)9U`)cbM?hdgSC?)YAMyCStXKE%X&UIy!na=f{hL#K|C4Sno2GXA5!ws7#^WZyV#lJW8@wR}%D_PtW;J^Luu^GJWqJKn-O?|8ju z5&ovbaW0P2Gl=13~{+jSc?x-LQ)*#Qv6DpcB^jopg@$OOJ8Ic4P+hwcIOUxAz!w&$u#5 z9z{-Rq&GziU(0#(NB7nn6Y5R5iTtBI>Sf(a<~rs&%i!Yux#%CUhavlr0k`iNledsn z>Wm$-%E4zkwy`^Sm%}lPPkb&phC3k6VGk8?N}s;Y(Wmb~FX$KkW-p*6Bg96BJgDot z<45$@GH(yz|6A*725Os{eTO;vt(NtAUGdrdmU6c@`pQZnl=CbO1A#Lcrvmf1tI8KB=YU$Vgw5z3?y{e644G0_g zRok`OuPV=v`&b(#t})MK$~s%$iDv%#?v%K>BZ|HKvOnzAUgXIAA4Xq74%Oa z3|SBJsCriWf6O(tUwdbHSl3w(kFr0CHE-lfec!^bLd#r;xufKza6dLs?iXg`5ye&H^RO! zCA&=7G^}n#*X^6Vz~j9W9wjcB8x`uFHS^FJ%CPKSu~(RS^O^r7 z^Qc099d1i3H}AI#(&y?3XSJiHW8VXRDB0+3H2I}(HtmmFX)ddDaqr#i-J#y#3FyrD zpC$f%ipMCgvP+opv&LFlWA1-dtuf2ov#xHy9IF|ZWnRs>64tZ0&*>4RtNQBfwXCL9 z*1ScnS+RcyIj~3R(bl^4E5yScA&->rN@AV5@#LSF_kgIh_6$fGY91i*`#tEt_B^9m zXi5JO{MkpM?1zI%+Oc#8C*?8M%dp#-dN^^+`3Yrcmb}~R=dYj_vL=q7+|{J+7_0jw z`oB5ft?R!ZcfzoKF6-6IPgvvSE<1E{b$3%Udd4_QztZfxTNJ+(Hlkx6+*=&D`hlj> zyoj^?M%zL3#Dh(~H9dU4(q!abndG~gKGeY2b@dM3<*|qNV7%E>xa!Sf;hlq=3vTfA z?XA%S`*^?L{;db!AE>WyMou;CsxQ9p+jQ`^yI51?KJF<4o1U*JT-9In_3bI{+SuD$ z=&Ns#w2iJiYs39NRXh@&^fS%tpTxThkL3MMbspbB`r85C{d4Yd;7K0ex$hUl@AH0; zEN)l!z(brxo;2zA#&Y(uV5cxP)YpXjpJm+=UgW;`{nHM-FLG1%+fe^y`6063<)(OU zWB)E&4msD?r4RYW^*`VvjPl1WVT}tfTf9`V|Elw*(vGFQSDYh-pHv)m{SPX>k@=Uk z_o|@wUeRW>p|rKcZ>^o2A#wjH`&!_yA$RmNy6!&q-i3_VPG372y#(Dw@@A^sM z>YIDwbBMR0;d8sD!TXyYJiAcCTC)$n_Im$u*Zu=_g}%2Y`>-*GqX%kuCkO9ssq+p@ zda2p>4faE8wZ5b2 z>ldBq*>yB|yL#8zyeG28chS+F!nmgT0e*+;4m5FxJoZ88>R&1DIvRexdfY#T`|m{e zJW};{U&m)aBTqdmkNV<&Zp+#0t{Gp_t4>0@6UhyS?8aj)|>YIicmG6y>nos0P5 z#OE7Fe06uSKh2D<0KL4!>Gs}NwZ`5%@i)U4#&y=<-lTZEzV7=8qkFs~F zagj5MYMeXsmtMv{-?D?v183c#h5PSl@|{KAE;E?wMxHB(IhXwB+BLR{q|_cFfsd zWF%#4oXt4NyLTGr{KB*ilTYKA`<1-#)y?{W%$cq9e_)S~eLK)8iQCwMK3B)QtvsH- zBCel_lokf%qKe2ecv{?*mZ6Pc&-DfgM# z`6O>DpR>uQ++$|yL64gGY?3l_zn6!3O|#tJRZARF{<=cRKHmGHRmWA?K^teTA95d< zI$y8>zGZ$dHVQfKu&a)7|Jnn;-F4)I359ESZ1bMduhv!MEUfHvQ*F|}K2 z#=^pfwrTPH-d-Q~ol4&fvo0a$1blVbqO1=!YTqP$GrH{_zSn!yyyvhFi9S8eci`R0 ztVthbto>S@I&1MI?)s|5Mz!ITqrD3c!)AbvZiN*+R>JqOztGahr-tkE%>(^;&;FzG z@5)>fJM_Ez+rIXPaNXB%=RJM(z33@>xXa~hhcidzouB9!XQ40EJn$iO8*TrzXT_d2 z$tQZ%>b=GA#s``P_CCNqiKEPY=&!uOe7?R`=Cy_T{-XE9N03D~^PaUmTHl@HkXw&y z-Z{Lt@rjFg57;74;c?{WJBN7h+rv4>j-}Hr(F1+GE@_j&W@xca!dYkGiS} zUrm0_X02qxF0Yv%)=x-h|9g8684Y*T4s0Zyz2tY(1C&MbyGPmov20Y z`*-r*LGK>yKS$jEJ84Vbm#}MLr;$43Tru~he&c@&+&$y0ao>kFK zitTRXyT?Yc1F3f`oyAx=lQHuo#yNP-(CTaZ?s(GDU2atK6B##Eo3bZeRo3gySMdZ+Cu}Krh!abhC0p^2W zXRbG^U(J`x^TB1iMW<0b9=%uTrQVtAOS_>rd|b63_q!?7i-YfqRc{StkUeYV<%j4g71(Y2J}V~#m(zbb>O zYtB=uIEef9aoi6Lop<)N=xE666CNR+->ErH->eCoeIYJv`rZ?{|K`MN;rSmaol@3K z8XJ&>%z+wD{snT2FuYe!bTS!3yjDB2kNDdnI}5Bsi+xXQBj~8LeY4g}|Hdw8&$(xn z^2hq3*DO!Z?mqHmmSZpD{!u2cum&vgD|;cfZi!Ro&5gBNSf4qDxztj{8)NY`ZD8B| zt7r@OcLMeRKG?^Puw|%PE86iS=Sr7iE2BN8)YpoAtZxVQp&i(XN@c4nl}*Jl1)X>{ z`GF4gv>ka>ZO0nJSZ(KHe{o~Y0?+L=)whAV2OFJ9`lIMa$}Vg5 zL9yHI65j6rrK*P&^l3|1+A~D|+Ap@NzSC(}bDoYqBzvf3epa3XafdSV4Blv%ZF-E=fcyZvWJDZHxmK`;)aaoh^`Pp(t z>Zrnj7-htky5aGffpORY8kjdXG-!pL4eu46n5Kp6j`XN?d70~P8TbA`&4p?$U-;CA zJt4gDQB7>c_L|ec)z4GcjNvloY^i&H7j?z@)0B99QFQXj*an!Vvo?huFa5M|!yIj( z=3?Fte{^%yh_I8n=2U8WYA%^lifaFiv!R z-uJPIG4SPAWv>ACZDjoObF}^S<9_cu`fSGA*R(=SgVuL@jpqCDTSebzuH=29hSvA( zGqeHYN^Rh+0p1O2Xobh#FBX2*t$DwFl~#C(cckzCnMeEz*d7WmUCBGW+ts_W`@a1s z`TJ+yD=PWwE`{@{FprsGuBuUf`)~ShIm7a%s$1Ss<*XxFmvh#U(&^bBQ8@I(DuM|cJfJ;>bX z@nZPu*El;f?!AE?<~$c&&HKt9XPx!|ZJ__zn!>Yno^byT)jtO6?{6~R-aBESevj0l z(n+xU9N{|@(*_!}X5Tw|i$+aDjo5y~&f|TI`tCbey!|V=_mv%JqgUIXTl4GB$tx?S<`FL}W zD_>_QJ_!r2-AdlbSEIgy`Z=3AIK#}-^5@Z^2HC@+?6tMZmNm6r*%gfQ2iaFcJM`}< z_U)w4)kv9+X6e^?A&kS3VlQoj3qC z)){TtdHJrCaap!&UUxp#l|NNqm1=D#;o1Yb#?q9FCflB|DCXdgiN)n_#nGKLIz!P| zSFmMOPum1-5wwlNXjNP;N=?f{I|Ev&QOODws%^uKsh4&lADT_eP-dx{hjAA?=cJ`w z>(1)xSam^LtC6L8JG!)O$Ct~#l;3teR?{lmp_j+QXD7ca^Fp>g-?gr@qqRM+SfP8J z;)3q^D^qQGDS@WVJ*aEVe4oJQbUt=|s%Y0gJ^9uSmH0PF`=g|Jyp^^UVOLLkd$w!- znvSl^=6CgU=NgZZ0S-9dIT|1Mw{Cvjq`TtU% zR&)M=w52Vje@x;-vuC^7Q*C-ySnpIFZpd~a0(#oJvMFO_D&3aVMRwTX781sp=W2NJ zw3%f&v1x{`*>TOX@}Sk~n%!#M`HX6`&QyD=aan8o3M%Xa)Xy0mYfsCpYuB6G*PVVE zJd#?K&76Lyy`28`&*|EtE?vuXuXx`E0MU%E?C-fM)R2;UwVG?nF~J>Tuw`@Ztd!5Uqy=`al2YoQz(}0 z?rck~(^GmH;U^MM1j=sWJ(qZ&IizdT`QAWc$MNkf`&7z)PX}fAiax}B1NaTfF8LLC zyYm}E>*B$0>)M2J5p!^eS>jVqO|`8_t?O<{r8~Ovb55G8s~^&8QU{V3dGf#4wV-^P z^;L>#%}NF!y|b&s$aZ%V$c)rKB$5XS8!Cr2Qa#;Nb9+boJjSNh_RJ{3w6_U2k8rtE z9_FT=^R270Hk0R4B%G1{-`d`qZ%yUNh49;4lRzij+&}1AlyAGeMvSLxjj(|(|A;Qv z(WS5HBEI$&6SO?x=M&z|*R37%VR2Kq-2=_B(EOUVn##A8tltyx)<( zRUH{qP%b9?hY8zVr)fIhsm$tByCFGi?a-A}?bg%Tbsg8JzWX1@ZkU^|h05QeSrXKefJIBc5vOYtH-S`f}IH68vnwnR!FG9v-9)Uqm)M z1>bxCnQWxmk#;&NXHQpm>*{P9vdj2fPit3JU)7V(uC=SwHDEJd8Y|V1{ZHgar+#cg zdyE*3f22Ql&sT9PMm|LN7~!Rl$=EeKo_1q?N4t@Qx~XW^%hS+_%u*fP=sPft(T`nu}1A(heXU1Oz$L%$N{90qq+|fK0)|| z(oX5mc?OR1=y9sZ>L&aS=i3~YF6cm5X0mzYWVfE8p*mKzB3d$YM<20rJ#B5vl?+Vj zR8+d7o33dOQ2q&*692`-zx9@(-tFGMw%@k;*KW^>Swax2ke|XRCkIp{r zba(Qn)7>fWI;bJD*1CHP8FwV#md0qe9(~#rD#)U?*7mHDHeKB-TUWs#sct4$s@hF) z#GIlvqo4K>y*t~M^CJQ0oV3IdKhn3=nP&dHL_>2 z-TAH_LyAb8m)@=O-_(g_ep4UTcg!(;KHVhMCY|kyni-1E4-)1WKJL1;=*=;vEYMeE zQRihG?rCrRTu+wqM5$KiEI3t9x8}P$QF8R`+Les{aN(1r5hw0@`2HKdZ-G%{d@(g_ zojEMIQBBm5)6wno*>2rTYJxV+J44Mc=kYCVFvJ^d`!B|Sq%liHPC?u7p9X!JHWryO zRDY{ht9I9p(n6#fwI5mWA0X}{_!u2bcvPd%v%Be;B{p2%md)iwZ*R?;VjzdK%B<|@ z&O4R()^=v?Flr9XN3>#O7aYJm79o_$u0?+6-4z!EAp(2O3q4t z%A|0eL^!Xb9VskT#Sp_>Q96fRJIL17o>dONwvLWYArNI$5|JuuYein_bF%&we!Y9$ zDujq=i5;CMA$n0+>_SN_$o}?BTh?x$*7nYxJlbd%ZG*>g+s2?Mn&15qw!F)%D-j>2BMBR7vbkVcYJ>BcFYZ;&O zr6`n}K?>dTGK@}MbFP8u^UDfAwbX&hf&c02b zk!Sq48Or7|m2bLd$=%)Cy4RJ*{RFhrp_Osp)Wt`bH&{|h2|IJfAbP)aiLQ>$30j6Y z!h|1ju2Al@e%#w3qRFz!NPNwUf8^Ng0_vg&Ll1w2W4Cq86dyq zBXa@4BA-Nt9mz+=MzJ%=Z~2J+CVoOYn~#kDqMM3-EVLrCWZakd#7+E!UgDJU%Un?A zCgLVENAZz(B@Ov4bn;u`pISRZ%k$~yBW*B~@0RKz`8~8+^xq^2|h3J`8A(|eC)PY@>^LLx>9ReR%Z>Qt&w7U5piN`c$8_$cvByW@GX2XqefHq zy2Yt=FsL=gegI?X^*_{!#T-XB^Lu!Hgd3IU*LIVpv_}WbD|6q#a1}YXDnGxyNAwZ= z--KS;s+EtlWgrj;210>wAQFfMVu5%d5l99D!C){H3#+B>!0WvQVtU&1A-z%|0A6At8G^Jk9=gtN0_=BE74Pi z47(F_rqnqM+Y?N8GFc0sOMm=N!b)4e$+zmuHYsj4O~#^~I?<%DY3J&5CwxKw!kjr1 z=AJa+?>?>VB)_(9?W|{0M^JWgOG}W^M})KK!%V|81BjD3_t#gFmdK{d`96W~1y&wx zEP0p5bNTt2=L(PK*oif&JfchGk0=&J?#Lr_bNSS!i$$3S$Rln|eBMqCbz6$t%eYBD zl}El;@_8M%t>Um?(v&6ZJ)3H-@!lYDiT@@(8RA|kOt4^*?)Kk_^F5sP-^{o8FSWxL z>J(2rf%EiCvAEsxzqstbg)KzdOg^vkxdoc(W*UKvljg>8H#OWmUX^Jo{+qMqvg?GK zgWCq&w((oicgHVvu~_2G6^qh#@`&4V+zvV7QuT`4>$vTd!Y`QA>sf4OMDn;9zqOw& z7Uu}VFPOA^xjTO_7#fnS^H zH^mO8gSX>1jl2C8c>&bPr9h5jaw&FG# zFHR+$DQjp0v+e?JUW?#AZEdkQm3XA?-T9I7TntUa<;CI@GmhnUc_dGH{NBS)@*-g69xV?>=u&O-b76H8Mpc8&rWQ9!#k;M-Z&vM)+esT1E z-HZRy-jVyYgx`k$Zv01TE2-x}{7+k7EQ-vLbnSZ9fiL2h$8R6Mr4B}FCs85-R~3tS zlcp42;%1wZwh6x`%g^Rl9h|`L9{fh*0m=KN(A=`2oW8SS63W+*Q-;dTpdGbJB9I-jK$oyb1Q)#R3ylE<~syml@8%x`E)`4?UifqngT z)UD~KWQ(MK5AK_AxBIgA58~E~n~V?A#&*Ad0rx4_m-$<0U&k$g+dh+4#Vh6J$eVTu z_k@|>A$>*4H530SUoI9!rb>B6lF5?4#n26YWoZ9dj@uJ1w>)l7JKQ7>Y{S9EJu;t5 z-gn}^WHT~}-`XNm-b%PZ+?V6NS==eVQ&vgd_eom#&ouKM7%A^MbZlADp86_vZqS)k%@w%mxYY_RkMPB2+@|2R zTO1tyS>nD2zX$P4Sboyh;=UXA7jR!>x+@-#x_J@zhMS7TPP0r)oct`|-oyXmn=Kw$ zUe4=O6u3O@HlIn`&cUq>H=W<|NM29FZ7psKtU9y%lF(m_-?pt~{u8%0+y-&8Jb>>mRY{NhBwQ{-==04m`!>!gD3!Gu3T+iUI|Ggy>mzsS-!o80BrMSLkEgSH*TpJ}r8#BC${OTOChZ`fWeuH`pn4cP6sLDC(; z{T7LD1o!)JpR;3VJklOd;l2s?PBZ=~c6*55Yxuob4l~5BmWgxXjr?^<7wzNe-}D_%Ol?}<90o6x;XF%KODksD{f20!69d)tWzCid*-agzWI^3juZ{zmf_ey%58ZX3sB1XEI&{}=ERIf8}Uy8fc z-X-_baNmM^#w=H-)VJh&Den6oDi+n`X2GP2y7~s_6aQT5!$WvqcxF5P58}Ut-@>c5 zT+@Mr_yvAgEM9NsVTpT87Mho#**aJ(ZWx6|>aKx*haRE7@>?Epo6f(fkCywt)KLJp z>A0;FA_tEx!oAJqE^#d9-@~{oJsB)+d2!oaEWRQ6;Ssk@{M)*BX!^I{b{}reHoh0P zoenn@0skTo>FVb#51ZfjSa_xrFH5s-+@l+9EVjs^s9HV=M*IPPY~CrSV15e)Vtk^Q z+=8d%LJ1=fh^3;5WOQEeN{mLqD{YcsJRAx}{lREllihAcIWm7d>JQ9om&F>EEarrg z(R3^s&g680M&<=V^Foo6w8gAHWZB%cc<}-~7?>Tswv z)XB!jP-g(AVUJaP%Dq+>OzHQ6AL9Gvw{=zD9$bD2w)b(0 zeIdHYVUKE_(EWNud3ir zgYCVkf;WNf{ilKl!1f+f!7qXB{iT9ACSKZCDtO&uWYlzB&ChFUJlaO^YhZ$Df^P)B z4(_$^yXTtu0cxI_8ZAP6_9N~6`Vvj+JdQmeI7;}pKS}-m4e`+~fWLEr0L=aHj+J2_}8TzvTa4z_NeVuAjtG+8^9R{8GL{7iwBB;qCb27g2wX z_*R4My|Pk&_k->ItAf8qe(gu<^LyZX=FL#)c{DCOWbQO)rmplgDQ^lq_)fWe*Msf7 zqf-7F@^h)}Py9g!j3%(G9Y}gtfj7)3m*+pho50uOFXcJ)Q^?yB=&x4$4T9So@qP3X z#x2U%1ii$!i}dYB^8Y+o_IBzxN`6nG<2_AyyT4ojKJ8FB|6c$v2G41W`CB7@c_9OYb)rIeI;qQYpe%%V<(e{Gd9Qdc;r%6xv zLE^veLimmL68Yw-;i5rweEX5~j(6eHT=-KiyxN5eE_|;G|EmlC%7w=rX6HsD&%Z0q zbm3+f{)`KM-i5ci@cl0QQx`tq!hbVyXnq#D@G2L+(S?8D!oPIk51~)mkCZp+!k>2G zUKhUIh4;Gf|G4l(^f>#G^ya(p`7Ye!!dqSVAs2qhg@5nDN1<2QkE9=R;d5R1G8f+D z!aH2}Q5XKX3%}>W9~QxDJ(8c83t!;Eoi6+(7rxtt_qgyr7xu_N;7I=j7e3vEFLB}3 zE_{Ovf7^xs#f4vU;W}CPa^}Z{KkCAN=fZ1TxZuM7x1-Gx&wyupR?qCXnUX+yb@BI-svxN zat6VCJld>jCfMz2NOQ*z`_+p_8*6=Ht6xzX1PZ-!pSF_o5F8rRcB!1)lo*^88EUdE;_jzIe>|+&FNBu6%8OH@@Wy zL;c;j;fq84-FQ*&P=6!PCkA6mn$Ox9mSQA2a_>{2A!yLO;!-zXrU( z6@K%2-3)G(-;JkSHPqjU?<2mYuK2ES(L3?aq0czzCmhH8#et*X*TKSXQoiNj?SCla z>%cP|STer5e`x-k_yOoM(A)L(3$UD(a`L-i^YLiS$D8~No2c|J18;_(CRz9x z2_Jc{%wOLD&jCyQN`B>;xJg&v;_@Q?z4K;R?OUrIe}d^RwlF(=C%pvJuPujn<1FE) zke*CiCB4nyHyrK#5Lm{t{}RI6XR4%r`oZ>DE5Y}I?K4w?{}XJVixPbFD(rETZ?ML!za?NvZy!03`rOy0 zX*%Vb2A28$FY;#nDE`Gi-(#kaxAOnuYQ|T)KA_*a2D>tNvgKbtODN69u5V{~#7E8| znvX|20s4%cKKYeL&Sja8NBac+axQB+4mLjvw*BS%?J@Az3BQ#1ZGPPimUCTBeMPYO znEW7Tzid2nHuiV$W*qGFo&G{6=cUZYqixEW`AOg)^?OCTSzeWY@VCHH9}&y{->EI`ona8XjHdLl@PCf{E_lD(-#jN`Pj$54T=3IiyT4roe!<~?6?huq?e>;@IpY^B=XuS? z%&!~EIbf&16Mu{N?K6AQzg_^_XZZwsQM~Lkd4m05``n%2r&4D6`$$0A`++v}OY&>? zzn{}TrT*xK%6}^SBK6f|;WNQf9wpxizxH!x`z^Kn-+(`)eeM2x&E?2*;@fBW{~Rp& zmq+^hjL)-vV%Ik~1GdisivJg{7#iQFD3ATv{rhECeeIM%S3PF^y77ju4fS{9Ely_f`BiJH|_bX>EV6%NLKCUpJQXYUYFf zY+z5d!`IYmU&zv4)L(;yroINj8^H1iuE}ZIZ^06?;Dz8o(c(|=o1LT&mToHkQQGr9 zhyN2`$^S$mkn*R#V8(xnMZf4u(udwo|2l9$v-APt`!V=Z{8fJdAO1zNymPJi7J}`w zmXiJ^uzhw?@V|iV^O1rl^=hSaje}p}!t{ zDfnUw|6(Qfa_VQf)xLqxn&pxBg@4}qf~I{J{*{qd^sCRUXZ$9-JknmLTxDXLpLP+y z{n-88nIG|c(UCvFa`xJM$OMlYzkQo7&OD~S8_QW^^D+IM_-Ev2qQ^XkC*_w%&a|74 zNBblGGhP024&3%XaW3sed8gqZ;XetMbE8|qHa`kBA2WS9V>%WdbouYAfaPqeGd?%o za>r1AH{N+?+5auZ18I*45lZ{!kS9_;d89obMjw{=XHpdL59IN`P1j_fpb{eCcd29I`2G(%boctrht}{1jL9r^#Kk2le>aY}{N-*1^YLiEB0l@Pt>pj6`I=^*%N5)N zw$I@Tz6@-iyA^!n`DXeyzmLzF^|zY@q`v<-r*Svo4DBqi@ULeD;lYYOzze{)IPlfr zK~H(Sd=e~YwdIlUhpp7K1_%9juVTJw^Aqy3wvYOvJ{LhR>0iD9OnXZG3;skuKd8S3 zE56O(2C$u8h6Rd;m{^9h$3;)+Sm$_Y0*J#HEp>HT-oV9x$@omO`8ua$~@(?%xZm_}&{e9oj z<%`Foy@J1-RrD!@(BN_U3x2{uFSy~mx_t4_sd?Nua-Xi;ZGSh;KQPqajh}gNsJ|QA z`=CnkKUAhaJcPV;mDk=UWz)N{y?@H~cVm0MmF@4wQ-4rS|1{FK&jgFS$bsdY>fxG% z#-0V1Gpk2f`1@cvw`$k_%V0UfYWq(LGv0weWYH(Va<*0RGx24>a?bTg%l|82IrA#~ zFX??BEazWsdHqYUx2{Y-1wkg~V(svM3zjpoldbSMu$-5*)B7q|&d&NQ|A)bHj&`<% zUj_Gp6Ba%qs;Tp}AGYvEz;f31XbZ0d%eh-SzXhHjZS&IjA{)2Jx>?6|bonPB@2x!`uNea2hy z5A#3iFUzg*{pOXXys_oohtUUKw)r1<^><*AKU>MK$j4-dDNku8g?DzE{e7v0H+RuK z^glcPEqQa_;abc8cJz1Y@3OyM;(NZA@$6x1{~dVddd3I(qfLJ;@?2qEL!O=fQ!tXi!ugg&X zV5&ux??+$>Z|C=ZS9&jiCH!1Op)J3i@kx4feyGbAk0~#m_?V>WBmX7;O)i{s;p<)a zE*IYG!uwrV(plil&#Ca&`11I0GPn(_+Jh1;1>5J+h5ydGj`qY~9;yG$7M^b5E1|a^ zDbL@7DB+&T-+K3k$6?KEZE0 z;vWfbc|;dy9*_F(#(_t5ZA_Qym06BY0hm;Z7HE_?}orv6laL7sl+%gm2y zuW6duJ|Ef4oe-SA7k_D=FM>62orMqkD*cuCq9t5 zbsN~eBSGSmC-ZN*`X+?-FZf?fe2Skf{}&zp2k~F)@Skxy>t_xu5k-Ddj&Cvk_FW8; z-Wss|NPgtElYR^SawmgbAA2c}eMf_o=Z7PN-|R?F;@j=OFG9bW_+&hn^v5v~y9KQJ zr&Ydtex^$>9*@?r1$x5U<9SFXZq{Sx*GVs4i=Wjk3bTK?@p6~{^$z^VX5=sFZzHJi z)45w1kIA1rQr`1i>9@J?H7GH+n(QasBe(q@Bhrv%cuuyGw(7%HJPaW-bcr)_RflmX! z2Uh)o{Hy>!10F{_lAjyEI`>%U7UoNn`!USNqrTi&?kI8kyYck@9P01J_qzPu__Y5T z8s3cuUmEJ~#&Um(`Iz~4;vZ1nC6w2$522g*bKNATMqb1J7W|#r;*3PpVHrj|K9>HB>ft& z@PG6x=vQDVso*u>k2&!7z#n(uKY%~sz#Yg-sh{aq{9oCkY3Dlpe*%{NV2=;8Z`8CV z{O$Btg3oZ^yTOYb_;v8vj`&vGggkKIk5XRy5&3bc3ya^2j`|n;#xHdF;_+zfT=X}& z@PG@y!ryb@mtA=B*+b($)rGSzyxD~xa^Y88`0zzT<3G)XSGcfHJKJCIzWus<@tFPH zji}1!2cQsqgDbrsxbSN(>^sMbnlIs>(_OgLg}1n{gm&id ztWTP_0e8vI4_)-Xa^WLCCNY?gJ^oH}l=ocX6Ku!VQ1e+{pac zqSwK?!~bM(W`?P+O86#l-hn>_e(iW&y8`|Y{}tdxy}Guk{6P-y+zV-_+j?&F^D^ z$*)d&Ql3L#(dRF<@G1O|`Qj7{F9*wfZkmO6f<^yWY2jakMPIRT;M3;(SMCmw_%8y> z{Bo&9zZoq0*A@%^7%cN)xkEtc$9=|}Z`t(CVA03tTJ+n+|B-V2*R~8TUk2>V|0Ck> zDDQF0@z3kpPKzJU2VYG6OL-5c{{N7|J_vu{t@!zjH1hZ^?15m(-*3UPKC{4M;wwLk zy}h^0e+`$>U)JkduSNeQuCx z3$MD$v?pz{@Wp-TJM_1Ut?(yqK>wqD8t^}yTKY9u)<+W-y?*u3_UZ>a+v`=Zv;W+B z4f2ir*yWveovB~R{wm4;1=kOiXK#U>@~rmDrv1gPpMUtOIbV=-`4YbF2I`yn!8R*@ z+rTp4x9R;i4V8bIpWD&%n!l?F#dLum15mAGv@PVmZ_8 z=S2Wrt!Zvo$Da#mx!0BNm0av>{xZL{A#bp0fjI9^M8ctDHl0gm!bZ*rB<2|_di(*c z<&twFp_ZA8m(HAd{#i4Z&g=;VW~RE;mt5QK_j4ho-@hQ6?pZPO?4>iqz+il3BxZz@ zp|D{@a+!1}ky-dB#uJTXV?l!}Aw%I@I2#Ww)clK6yaU3Yi{?V{KsFu>rQ?xgD3(qp za)DUV2qeSVNIH@6Csm4)#c*f7D-@TDT3cG%TX=(pk+qA{laM@<-*hgP4pQuJED#}? zoS9!cbR;$`w0Rq}U#=1LUzjx{LNhWe!elZMOb3GLY#a&`tI?hnll-1`mR&|`!Ggq+s zj0Pjsr~d)6`T^=RP;~}Ep{hk@PzxEcRXuBaGMBflPIRwMBsJc?)*^3T^XC%WlA8;K zqsd?@6%A+qEEyXPC*z5z-1eK!h66!ltR))*!EiJf4#Xp2gJj~VKsJ+(MMD`xX(VAF zu}rCMOSf=%m~<0SKXdUCL_Qx=LI#tOR3Ms-#uJ%1_x?tzPp!l}74ttKox0 z7c^yei_y`RX|eD2m8er(WSkC0jYN#W$iSLmwL~zJNhCtScrdb5oaAp?Gj#^R||I+e_oN84mL zk%4h@*C_)M8znJ!Xg ze9d`XSl`CHPhD|qvTpRSe&#n9+e(G)k_=gcY&R3-^kCJ9$2 ziB=|wR3?d4CP`E#sa!8~t4dWz=MoZmsR%DI@y9ZOSUeGlW>awnp?K6{ba{)bKP7!2 z6wQjz3&g_dihe3En;t4@5%Qa4c2NlkP8;b+#9{+^=Ua=xE4BQLjNx1~9?u2Cak+!fBEUcr^yknP1G#J@ zk%>kVsgxxlWhO9+ADJ4}Pt71k35PHpHC#mNyv*oM_!IF^Hkd>A4q{UY#6wm_$MA%s zM-K^0kM0>B%TpxvWv%{D+z1)zXf_y4WfNFUto&r?mzh*D8jS}6xk%JV2BT(!1p>T2 zbu_==7=EEK{K8}SMaJ-pj^P&@!!JIDUt$cuRGU1fPj=XWKJKxgLib0U+U@)FB(z%pOaxyjnufWcC*aLQmxPsvXug+l- zAB~&hBB&Xai2{}iCN|MrJe0~9!9XI%yeS^AlUl*6Yf#fVR{67mSSE!`N@i1-HA9wO zpmq18^KDswD#2`>_woe7>2QFlqLowLxwW!mjX%nCJ`iQPnK42sMz$(^gW6bOLu2}e z$MlVi>5HzG&-jtqsbDUQjg}n8vsQ7`T)s40#Y8-keHOE|Wq!ydjbuE9nKu?lGK0Y~ zYTHwlc{e#c_)zmjJe!WigOPYV8cfBJPD8^-Lc_valVx&%rPlAiKz&=8iD#0`m$FRt z)5%mOfyL9AnM80{WMXRZ`+4hH4{uiYpRc}^4cgA+nKPxP{Jj6xuikIw_p298Ip*fk zWHOabh9dMx-s_Y~t2CntrxDkc*O4vt7s(5BRXGCcZE`Yc=wgZ(i|0a_3}ay;7>T6P zrosBpi9cyZPo^aH7*^s;%-|hSq!M5PN{xjnbEvf=+PbQ3R)$DX1iXTd+qPZ;EQy4WM z5oBA>U$g$Bxwf9}l_Z-=8sSVf5Jg`!Qt=$NN=LGapMs;*R5qAl;f5iE7n$XfB|Ba! zlE~)7jK@3BV$oD8$MRN;<(pUvn`kVTz?5iN{3=qG4dj(cOZKPAq!GJ_j^!mRzPS_< zr)6bF$7LZzMNd4Pkt~{B*}z*l@zRn*MbeNm zJxj;`6Z087>zwm1SlY6r`P_5Pl>U{#n4XCm;W$HS&N`U?E}bD}4k&6IVPU}US1T}n zu#B=7+B~)mLzNC7@!Y!O{{} zWzy;^m}TLrdA#}za8kG0Si{x#$8hyL9>#DtsuCI&Mky(wiQ!u0P^R$v&B0Y|d1%h0 zc&lxfsBtAKew3MOG4CLDC~#s&$g)fnGJ@%7GRhVMt74c5BvXNOFq@9%V##DC$FfS6 zH5Lp?=}ah@^oL5-U71v|zO7iP>;xm{EnB)|+0vFXo0lwIcK*V6OA8Z`)_k<3h4;=P zLwQkWG8Rsx!^}iNyx4QdXsMzI2RqS%^DQz@>R}bAtEDy9Vo-d>kQR9XG_hc4jwTaK zPQrm~7F)>&C|;>&S1w+OM=O(-xTzv(u+&K^k}`f(-D+5%M`gT{O{Q!9_b<4`JmMXF`X{jYEla_|b%A^?n zM{S-`G~swK6APrWv1BHlPO{XAmXSzhSa~-xOwQweWU*6({Mi#pi@PeOtNQt$Gd&Cb z-%kHVuX}8$qqYl{-BJBYyq8D@BI!&t8%~A7thA@F2QlRjXJerpljmr_Umocyl9uy6XLWS(>Sxogv?R5zts|9DW*G+LR63W* z7>RHwmrS56l!nr*VNgDlhd?4?#KS2}jIl%@8cnCz+!6~USj@18r^=+!5oV0Z5pr5_ z;uvJnE1rnug3O6y7&?^xkW4CbPE|E=K|YmlHK+-@8irY}RMq+YOH%EvhE0Tm9!8Oo zNg&%**>DSjHpOCbmviGcz;rCP?}qfrbdsnKS^!S zb!gG)4C8U!NTpI?dBZ(ZvC%7~)M7a{$+4f7tuL9hkzf;8Ivp{>R8lIIVc`!Y>jRJ~ z!?nwT5j6X@(ZO54g7L-Yo!PwDG*PsidET;fmktwFSXdH~R3?|mF*dRMSmM}(NY$C#(GoM*LG5>bB{t4KyRd4~Nfo^4O1+p?MX!gHI? zSiEon4H3`AG2{hgLXqQl$kB|!fb5c#LjxV{F>_!|u3~iR&J$nw6X%>u@HFaY3>FH} zJJ5X%2|ha4Dbr&t@PSt%7PNM=8GoI0ZtK(l)_O)VY=xXiEw|2Bs(r`M$8eJ-kR0zh?@H=w!|8t7|NQw6| zQHC-jA)`F+0?c7=3S?8UI6F!?ND)kC{gDzsRVFQUlggwe-mgd+t)8?rBvp*G)SoI+ zR$o&kt+isDB^gnXvOLOGCM^vpl}SrdyE19@wO^jNRF1X!S`Ajuf8{w&fo!SW>3dzb(3%lvfz-+DW?oO@9GW@el z9A;scz44)JG$q5oddY4}CcBCk_o8rM6X$3LOV@#LB7!YYZMF$jMHQ@yDxjIOo*V}+ z+25elp42Nn;kykM`Kn!-ks0>btaKMjAGg3r8}s zY%-f=ZNo4(9>h$WM8znEX^|rzagDM!E}97@IW?12drPdk3Wu`n--<^9kyMCxH%Ef( zu+IciaoI)}2(ek9)FmrZma4TfX-U#lBrT7O6-gOy$6%zGrs|Rft&nVSj~H2&k>b|Y zyTDkUY^jqiQ6q?aIJV^HTG!I%p-?ywjj+ok zjyWosVfHyj8YN9Ck>+q#2xD3_AX5Q0bwnbuSR|dIBczg%EC-3LcCAQR-r7-_bj%7U zbhTA*Al@bb9q^WNaq6KNIDQG?{=t2SvGN0CapgGvW`%UaN@fTjN@EBK zq+)?wj#Dyr!&W9ujFn`3EYC4RCdUZLWMg#pWj_i-T}e)kU~yAnO&hdjil*b_*xjIP zsOPAk(v!N{Q*BrS*d*K4BfHl8{&PDV7FN0yhUh>poJ-}nAb?3|*}BTQaX1_ar7`@b zQju6LV?@K@P$Xoe*b>f;w=#29q%29qij?K{t(1DXc`H$toQh#RI&2>ZLC#lAD*350RuOX5kuvG4 znp6Z}b+Ixzsg^WQeX*FwR2^&eq)d6LjWt?*YcV^jHdc<>R7)ED0C^R4ue#QX%CJ`* zDLt=h(&`&FRy}9MtIt5ZdLD>ZUju>ac_3bWu@cqCny9{B6V=y1qI%8>RL|PU4?tRd zv69snD_MOnNLDX2lT|k?t1{Jg7>pLxlUChY9BZmR*6NF;^xdjNMiA|{N|6y%<8hU- zR$l{{!K=kq+>?f zGzpngC@Y1idCytt2$CcA#T{$1U5m17)%hd)9MX{JQxPMY3dbYaOjdRqI1i{*j(%BZ zXQk)^aTZ2%3GVR-1~~zyHrbSN@34^sGIAALOIvHVY>mk#L!2;7M*{(N=VW5mJ#11i zsg;E2lI(-;POAIc7854Qeygr^giK@-8E!>0WY;>wE4Kx7vvUmQ7yc9jaiYx2t9shh<#!ReCx{qhIV>#^ zHWFb3V$Vc$p}(z-YnwP4&MiJ%q7qAx4BJk)R70Xln2X-_g+zY;%518WvjxII*=FJ5 z;a8|B=Jxwnv~{FYZGQjR>f5B1BL~WxoUju+&aFZz?kb9NM+8rnVYLz z7kcV7- z!HM{2FdjiFDBj@ay8nw@1p^4A7MO`6|74BL)8R}!%~@c~NF3!-Su<-j-j!O@!r8oF z^8C~q>(0K?U3Y9c?EZhfoy(3SM-_%^009zLu|TjJO9&w$N*Q_21&i@qn32aGq?`;~C27`z@WhagFttcD1wiKAFn8&BkX{YkB#%=v{p8FM515L5G2 zyA(ANK^`n?yNbdF(n29s>g~vGb3|GS%f)4m&?4WAuYjyK6RmfBY?4V;fMDI^7afHl zUf7BZHWhnOmX{Un8z!Nyd+j_Zvtw5uZPuT1Gw_|@3Ja2s6M`Y+D%!>G6Zi-taAf$- zk`O+VNGEaaOe&bHi@ZF&x?V9Qo90Y6$<_EO>q7Z{QP!zs-S!Ru2OctrNcq!8tM&T) zz%{GOm+RMXZ<$j{6G2XriUnpE0nBT@7qWAql3?8?WG=%aIr;VQc3+RjzApZ|oAYWW z704W~EXyK}%WbI)EH)a;JkB?p{Cc^3zPWz1S)ZSrotAY!S^{p%$DJG$c^yFzSJ)@N zKV@_}PV_D}XX9wQ^Fk;Upzcn zJ-&DH_~C~(TALo{oLJKhZ69V)!yYyHdW>^7SW_Fp{6iQR9#&zL^y4D8d8F zIcuRi!_2!C%ad8K-V=Q(%x+M`bm&QmSsm=%=WV^g6%Tl?&ml?P8r z6z5Plknk>S7kVE|3Xg;9#TcWcB5M72b+OjLs9&@_a&k{weLK_;J-cjBbYGr+rWr1* z@P>SZQ>Fk~3i6xC@PP0(T*&hcznwcYKJ?Ry&@nMul8lVe(#l3HzQ^w{EWUT{pwc+4 z$<6c%Y`M}BS+sZPq_1UPFuN|vpm$Wl7E&cb>)8!FUK;>x0EsDN6`l47?i9nTh(jhz zk!aF=MJ99aK8OX@CrJkAgb_^NMB3Ql=1bGzGl_kQ1Kw40!Kde~4SdIL{>a2dHM?hC9uq^Q7L}+@dP+9L;Z#5B{CiEiQZzO8+ z64Z2BF)EQc+mq0eix3foXdJveY7BPnj>X^2m4b&sOmY)qrIP`MBnkEe!=qVWRR#S&+^g&~HG)+HN0a zi#W?`G9c>6&zhUHKe$D=+po#z06c=2X6042nWCt#E3{l;L}bT9b4Z{RF1j3cnXKd0 z=?)T?QG#k7V>H9Uf(r`rrh(=I<8gw!3oX84^94AM!Y&WJYt&vzmWhh$qKp;VY#t1C z*pHg#x(AkUK@vO_C5P>D9A!1k^cnS*X5nWX6!Ab(eQ@ z>Hw1_c`5zf(`WB)XD{)*J-DBJoNbMYnm{E+bZk%Kb~8e+^I5%FuP$)}V6I;YEsyX8 z;$3T?rRAw%?#XF?u$9qFDq72mP*UV2&&VrLQ>{`MsWgG*+Y6vH2=UpaMB?mitXn0+ z-Mwn_Xb{WSXMzQ7QqB&N=5k23@NF5#jP$ObF{6~tMHMiOQqLcM`0(C?)sqh%J=@Fi z!p8tKP$n&dc)cbE$0)6dAEz0_yndvBa(UuSbR7)P!((h1Qgf7VZ-f&uKTFq_EB!|K z@732rIiXceoBx=^O__zh!c7!_!79++P*n+vs8% ztz*t`a>z2GT@2*Rhs6(DpUl_Ll9XvJd(PJ*)t$XOP5~cUar0X6tuab6>Heaf z*@QKR2b&nMKlW;(VEx1~1r5MqE3^c7Q}m4|6Y7-p+_BR}p22hzZuqxo!ac_0oAB*I zIKBn95RPx*&|JzxG#1*y3PF3>epyV#1XepBZ9L13Rril+3CC_6G+vctILd>tJD&QY zyGxynTmY$v$s!;dSUN)DDw*qgX-(!|M0Q;u;8n&+lYu)%ckwCpBT~}XWjHq85)-6Z zA0wU7=fLJFDbMQs)$5Do{?mu|K6oL)E_`?)s#%#6vLuu<;{Y9=PCvFzeX+=J&~JLD zE4Kj`Ua6FNNC@75N(1`T2gP85MaMEF?5WS%c-f~2NU!pbYit<-h+_yhX$>VvRzwlj z%-ijWJ*-8=Bx!{hu@>~E($rgFOXyDpxeJlkkh>ss8B`=0P{n*thw6<{ND}T#m*pKd z>{pEa98*fl*y!&j#{X?h8T%~ES9f5?BZiN2J_r5eW|5j+VTI#N$BD53IVSrZRz@XWN6 zH>`uBlErmX`3%N~6Wf@EZ-AXn_l;#ud<~Sm$TB}80yNN_0b)|Wgrpl62VWrGZ9C<3 z#=ae4^c(0qqb!E@7OpZ1eRWn`JLHkM3NX81XM|-z;XkD6PA4ESKL;$99FlW5+bNp{ z&L@eDS0yl^<$>yR5F0O-_g?8N^5p9JqF$X!ObE-c;5=ZT2Y4{tBf4oT=$HkQMCt)c zkg$V!&^K)*pc@G$ErD4kQCLN-J<@8@@yYWCDCp8}*x#UjDPa~yoNgm>q z6GePS78jvFs#*cH$XdHd>-L%E?8gfF*r@1FgJxu{;O%wdwF~0Q#WRJ?C6x~2}=*@^Gw0Cd+5QBHDVUp_tG!azp@ITMn zwpQmK*|rXM)n`Prj~ke$GjA#ab!aZW<~=~HfMT+c z&=h3|%eNtJZwG7^^v)ijvSLBy2LTGQwAJ(;D3hiZ5$NM0k9>taGIL_=kvXu)`qt-E z&08p*sPUI4DbAIOb<_E*z*MRX2eZm>q-G)DbgQw*<}^9=>&w`nhS`2pLMV!gDpw)W z4nU^aem4g!K7QE8~5|?K(8L?k@YnqScO?=5)El6N~U!E}vbVw8bgFv=EtzDUOLRfQp-QZx-#> z6>e|VI;fY+mg(u_`n*`5*%7kNI74G#ge0Gb0R3i;Fx#(n(VqGT4-$P93t*T@n`yTl zBT_9mS@LbkRaPFH>}KkR>@mBp(1d3yM9!2ElT6BR@~8nBdN_A*QDcD0IXwp!0 zisw+j=CweM>-f-SHsLTDL%m>jzGg8;1vM<#pz?{wjkf1x8qxCd z6kiBD0s!~`3JFYCKm18^!ya&lOobWh&`?N-`b`P^Z`6t@a)47^+;iB4r%i*9Xq#{V z!u~;ZA&G)f6um=(CLB>zGXd>D)!|s|GnhPdDfX#QM(Eb~@m5vnoI1xh5ja2kP!qf7 zn+^qq5($DjKu37s?;ujn!l%d-Rften=MCOJWDm}4!W!{|>ttRNffIH^gP+;N?H@sS z=n>58Md(EC&_H@maUzVmXF@>8ui(=qVvC=UDB(?P(!It4LaAax)u=JV1ZYeTZj$2F zKBS?Y#?Uh3tZ~P%<#2>u*bzZ4mnJo4xwM98t2oS-WE8cb%odUZ&mf3lbl7=4_pK-! z>3T21%Q>?tb+*sS(D!KEgtp}DKgf|D;{1ZRJIkp3VhkcGSp&L|Mg`~?wSTaAxFVlrIa26Tt>OCi8l2~XuxJt zm%MzrNqE`tD&yivPi=0gb1Q=dvj*nR=%##^mg>=3{rKs4~c<|G5O zjcNB%cz$tSMxPQ*VIVui+^1Fa;Klpz|9KAs5jH@{=$uDL9M6F1U#n|Vl73L5H^>J( zPXc|wyNmn(^0J?=Kz3FR8do%5&UBpDt?IiU>E$uU2C%C)&VjZ^PJ6-bi8^7?q;Os1 z%@H!03KU)7Vuq8kwi@Wz{=kWY6Iyp)y9kV!#B9Ye2H79=aaI9XT|7~#PblHEJhu(t;}kvY7N#aA>a{^NVhamw0;*xQk2Cxa}o=-Mlm&|AbBy1-|*+AVW8G@=L z!UCsVg9ZgWrQ!gx=Lhlu{|pfighUjFc!Xi06iaTh0js|cHLxo(Z<y zi19B|T+?qzNj1HNtbiH~?29OZ^dKQoTIv_GJh23_0CrNaJ227}IW9)>^GY{7Xw zhFaL&&5|aTu!2`44YIOg5_a)c0gRS>B&t2zeINzuzz@UELBtr3YphYtN919rRgF=T z<5`Qy%y20@$6y!n50na`TVYUz)Yv#4ti{sXc!QgM*kaL6e6d)za!9C`5)y4CaU6+C zu>-wN-^_h>;$WmD`9zP2qZ3CitHIFOmV=lqDozyAs)e}#XQJs^A5bRwNyI^PMiQU~ zV+#(CUI!q1_8I_BvYzolQvpW7XW~Tl6zyx^j4gq6iX@7B!Ecd2n59^QF2lY9gt#pj3&A0ET0C7_jP%p;gqVr1lg^R5}?vZ;b#i&Pgh3swRR% z0?d0(IY^j6eX=hTxV4u~;T_n6^JH^)K(e;-fYXx<^j)`t)Hs(lp|v+^>;PbdAEbno znUn_|!Wk8Glj7RV?=4!e8tL&ZgjTV*MGIDS8fu}PTm)Q7B_V%;$Y)hTqlL_kAm zYv3JnSeMBObS~YITjOoor4kJAsEJoi*jIR@luYqRnxM)#+(D>4T7HatP5b1|FZdSe z78tAIFv>}83JH*v3DXYu(D?ks-Ad-vn6 zyURb&rG;GgCD(n)bs_KFkNi!3e#x)9?qBx0zw5u4|GDda%}42h>@3;@V$~E%yh+i42`+3QApZ|8T_#XdoO#?Cx8U6?S${5_wf8M*Z b_>23%t84F1yzgK4`01U+Pyg0k=&t)efwrFv literal 0 HcmV?d00001 diff --git a/tests/secp256r1-mul/src/main.rs b/tests/secp256r1-mul/src/main.rs new file mode 100644 index 0000000000..05764eb3e7 --- /dev/null +++ b/tests/secp256r1-mul/src/main.rs @@ -0,0 +1,42 @@ +#![no_main] +sp1_zkvm::entrypoint!(main); + +use sp1_zkvm::precompiles::secp256r1::Secp256r1Operations; +use sp1_zkvm::precompiles::utils::AffinePoint; + +#[sp1_derive::cycle_tracker] +pub fn main() { + // generator. + // 48439561293906451759052585252797914202762949526041747995844080717082404635286 + // 36134250956749795798585127919587881956611106672985015071877198253568414405109 + let a: [u8; 64] = [ + 150, 194, 152, 216, 69, 57, 161, 244, 160, 51, 235, 45, 129, 125, 3, 119, 242, 64, 164, 99, + 229, 230, 188, 248, 71, 66, 44, 225, 242, 209, 23, 107, 245, 81, 191, 55, 104, 64, 182, + 203, 206, 94, 49, 107, 87, 51, 206, 43, 22, 158, 15, 124, 74, 235, 231, 142, 155, 127, 26, + 254, 226, 66, 227, 79, + ]; + + let mut a_point = AffinePoint::::from_le_bytes(a); + + // scalar. + // 3 + let scalar: [u32; 8] = [3, 0, 0, 0, 0, 0, 0, 0]; + + println!("cycle-tracker-start: secp256r1_mul"); + a_point.mul_assign(&scalar); + println!("cycle-tracker-end: secp256r1_mul"); + + // 3 * generator. + // 42877656971275811310262564894490210024759287182177196162425349131675946712428 + // 61154801112014214504178281461992570017247172004704277041681093927569603776562 + let c: [u8; 64] = [ + 108, 253, 231, 198, 27, 102, 65, 251, 133, 169, 173, 239, 33, 183, 198, 230, 101, 241, 75, + 29, 149, 239, 247, 200, 68, 10, 51, 166, 209, 228, 203, 94, 50, 80, 125, 162, 39, 177, 121, + 154, 61, 184, 79, 56, 54, 176, 42, 216, 236, 162, 100, 26, 206, 6, 75, 55, 126, 255, 152, + 73, 12, 100, 52, 135, + ]; + + assert_eq!(a_point.to_le_bytes(), c); + + println!("done"); +} diff --git a/zkvm/entrypoint/src/syscalls/mod.rs b/zkvm/entrypoint/src/syscalls/mod.rs index 760cabad2c..adadd04b96 100644 --- a/zkvm/entrypoint/src/syscalls/mod.rs +++ b/zkvm/entrypoint/src/syscalls/mod.rs @@ -7,6 +7,7 @@ mod io; mod keccak_permute; mod memory; mod secp256k1; +mod secp256r1; mod sha_compress; mod sha_extend; mod sys; @@ -23,6 +24,7 @@ pub use io::*; pub use keccak_permute::*; pub use memory::*; pub use secp256k1::*; +pub use secp256r1::*; pub use sha_compress::*; pub use sha_extend::*; pub use sys::*; @@ -105,3 +107,12 @@ pub const BLS12381_ADD: u32 = 0x00_01_01_1E; /// Executes the `BLS12381_DOUBLE` precompile. pub const BLS12381_DOUBLE: u32 = 0x00_00_01_1F; + +/// Executes the `SECP256R1_ADD` precompile. +pub const SECP256R1_ADD: u32 = 0x00_01_01_10; + +/// Executes the `SECP256R1_DOUBLE` precompile. +pub const SECP256R1_DOUBLE: u32 = 0x00_00_01_11; + +/// Executes the `SECP256R1_DECOMPRESS` precompile. +pub const SECP256R1_DECOMPRESS: u32 = 0x00_00_01_12; diff --git a/zkvm/entrypoint/src/syscalls/secp256r1.rs b/zkvm/entrypoint/src/syscalls/secp256r1.rs new file mode 100644 index 0000000000..e9614ce421 --- /dev/null +++ b/zkvm/entrypoint/src/syscalls/secp256r1.rs @@ -0,0 +1,69 @@ +#[cfg(target_os = "zkvm")] +use core::arch::asm; + +/// Adds two Secp256r1 points. +/// +/// The result is stored in the first point. +#[allow(unused_variables)] +#[no_mangle] +pub extern "C" fn syscall_secp256r1_add(p: *mut u32, q: *mut u32) { + #[cfg(target_os = "zkvm")] + unsafe { + asm!( + "ecall", + in("t0") crate::syscalls::SECP256R1_ADD, + in("a0") p, + in("a1") q + ); + } + + #[cfg(not(target_os = "zkvm"))] + unreachable!() +} + +/// Double a Secp256r1 point. +/// +/// The result is stored in the first point. +#[allow(unused_variables)] +#[no_mangle] +pub extern "C" fn syscall_secp256r1_double(p: *mut u32) { + #[cfg(target_os = "zkvm")] + unsafe { + asm!( + "ecall", + in("t0") crate::syscalls::SECP256R1_DOUBLE, + in("a0") p, + in("a1") 0 + ); + } + + #[cfg(not(target_os = "zkvm"))] + unreachable!() +} + +/// Decompresses a compressed Secp256r1 point. +/// +/// The input array should be 32 bytes long, with the first 16 bytes containing the X coordinate in +/// big-endian format. The second half of the input will be overwritten with the decompressed point. +#[allow(unused_variables)] +#[no_mangle] +pub extern "C" fn syscall_secp256r1_decompress(point: &mut [u8; 64], is_odd: bool) { + #[cfg(target_os = "zkvm")] + { + // Memory system/FpOps are little endian so we'll just flip the whole array before/after + point.reverse(); + let p = point.as_mut_ptr(); + unsafe { + asm!( + "ecall", + in("t0") crate::syscalls::SECP256R1_DECOMPRESS, + in("a0") p, + in("a1") is_odd as u8 + ); + } + point.reverse(); + } + + #[cfg(not(target_os = "zkvm"))] + unreachable!() +} diff --git a/zkvm/precompiles/Cargo.toml b/zkvm/precompiles/Cargo.toml index e38ba017a3..2b792d15d3 100644 --- a/zkvm/precompiles/Cargo.toml +++ b/zkvm/precompiles/Cargo.toml @@ -14,6 +14,7 @@ k256 = { version = "0.13.3", features = ["ecdsa", "std", "bits"] } rand = "0.8.5" serde = { version = "1.0.201", features = ["derive"] } num = {version = "0.4.3"} +p256 = { version="0.13.2", features=["ecdsa", "std", "bits"] } [features] verify = [] diff --git a/zkvm/precompiles/src/lib.rs b/zkvm/precompiles/src/lib.rs index f5cf90bdcc..36d9882cb1 100644 --- a/zkvm/precompiles/src/lib.rs +++ b/zkvm/precompiles/src/lib.rs @@ -6,6 +6,7 @@ pub mod bls12381; pub mod bn254; pub mod io; pub mod secp256k1; +pub mod secp256r1; pub mod uint256_div; pub mod unconstrained; pub mod utils; @@ -23,6 +24,9 @@ extern "C" { pub fn syscall_secp256k1_add(p: *mut u32, q: *const u32); pub fn syscall_secp256k1_double(p: *mut u32); pub fn syscall_secp256k1_decompress(point: &mut [u8; 64], is_odd: bool); + pub fn syscall_secp256r1_add(p: *mut u32, q: *const u32); + pub fn syscall_secp256r1_double(p: *mut u32); + pub fn syscall_secp256r1_decompress(point: &mut [u8; 64], is_odd: bool); pub fn syscall_bn254_add(p: *mut u32, q: *const u32); pub fn syscall_bn254_double(p: *mut u32); pub fn syscall_bls12381_add(p: *mut u32, q: *const u32); diff --git a/zkvm/precompiles/src/secp256r1.rs b/zkvm/precompiles/src/secp256r1.rs new file mode 100644 index 0000000000..44db101deb --- /dev/null +++ b/zkvm/precompiles/src/secp256r1.rs @@ -0,0 +1,237 @@ +#![allow(unused)] +use crate::utils::{AffinePoint, CurveOperations}; +use crate::{syscall_secp256r1_add, syscall_secp256r1_decompress, syscall_secp256r1_double}; +use anyhow::Context; +use anyhow::{anyhow, Result}; +use core::convert::TryInto; + +// Note: P256 library has not been audited: https://docs.rs/p256/latest/p256/ +use k256::ecdsa::hazmat::bits2field; +use k256::ecdsa::RecoveryId; +use p256::ecdsa::signature::hazmat::PrehashVerifier; +use p256::ecdsa::{Signature, VerifyingKey}; +use p256::elliptic_curve::ff::PrimeFieldBits; +use p256::elliptic_curve::ops::Invert; +use p256::elliptic_curve::sec1::ToEncodedPoint; +use p256::elliptic_curve::PrimeField; +use p256::{NistP256, PublicKey, Scalar}; + +use crate::io; +use crate::unconstrained; + +const NUM_WORDS: usize = 16; + +#[derive(Copy, Clone)] +pub struct Secp256r1Operations; + +impl CurveOperations for Secp256r1Operations { + // The values are taken from https://neuromancer.sk/std/secg/secp256r1. + const GENERATOR: [u32; NUM_WORDS] = [ + 3633889942, 4104206661, 770388896, 1996717441, 1671708914, 4173129445, 3777774151, + 1796723186, 935285237, 3417718888, 1798397646, 734933847, 2081398294, 2397563722, + 4263149467, 1340293858, + ]; + + fn add_assign(limbs: &mut [u32; NUM_WORDS], other: &[u32; NUM_WORDS]) { + unsafe { + syscall_secp256r1_add(limbs.as_mut_ptr(), other.as_ptr()); + } + } + + fn double(limbs: &mut [u32; NUM_WORDS]) { + unsafe { + syscall_secp256r1_double(limbs.as_mut_ptr()); + } + } +} + +/// Decompresses a compressed public key using secp256r1_decompress precompile. +pub fn decompress_pubkey(compressed_key: &[u8; 33]) -> Result<[u8; 65]> { + cfg_if::cfg_if! { + if #[cfg(all(target_os = "zkvm", target_vendor = "succinct"))] { + let mut decompressed_key: [u8; 64] = [0; 64]; + decompressed_key[..32].copy_from_slice(&compressed_key[1..]); + let is_odd = match compressed_key[0] { + 2 => false, + 3 => true, + _ => return Err(anyhow!("Invalid compressed key")), + }; + unsafe { + syscall_secp256r1_decompress(&mut decompressed_key, is_odd); + } + + let mut result: [u8; 65] = [0; 65]; + result[0] = 4; + result[1..].copy_from_slice(&decompressed_key); + Ok(result) + } else { + let public_key = PublicKey::from_sec1_bytes(compressed_key).context("invalid pubkey")?; + let bytes = public_key.to_encoded_point(false).to_bytes(); + let mut result: [u8; 65] = [0; 65]; + result.copy_from_slice(&bytes); + Ok(result) + } + } +} + +/// Verifies a secp256r1 signature using the public key and the message hash. If the s_inverse is +/// provided, it will be validated and used to verify the signature. Otherwise, the inverse of s +/// will be computed and used. +/// +/// Warning: this function does not check if the key is actually on the curve. +pub fn verify_signature( + pubkey: &[u8; 65], + msg_hash: &[u8; 32], + signature: &Signature, + s_inverse: Option<&Scalar>, +) -> bool { + cfg_if::cfg_if! { + if #[cfg(all(target_os = "zkvm", target_vendor = "succinct"))] { + let pubkey_x = Scalar::from_repr(bits2field::(&pubkey[1..33]).unwrap()).unwrap(); + let pubkey_y = Scalar::from_repr(bits2field::(&pubkey[33..]).unwrap()).unwrap(); + + let mut pubkey_x_le_bytes = pubkey_x.to_bytes(); + pubkey_x_le_bytes.reverse(); + let mut pubkey_y_le_bytes = pubkey_y.to_bytes(); + pubkey_y_le_bytes.reverse(); + + // Convert the public key to an affine point + let affine = AffinePoint::::from(pubkey_x_le_bytes.into(), pubkey_y_le_bytes.into()); + + const GENERATOR: AffinePoint = AffinePoint::::generator_in_affine(); + + let field = bits2field::(msg_hash); + if field.is_err() { + return false; + } + let field = Scalar::from_repr(field.unwrap()).unwrap(); + let z = field; + let (r, s) = signature.split_scalars(); + let computed_s_inv; + let s_inv = match s_inverse { + Some(s_inv) => { + assert_eq!(s_inv * s.as_ref(), Scalar::ONE); + s_inv + } + None => { + computed_s_inv = s.invert(); + &computed_s_inv + } + }; + + let u1 = z * s_inv; + let u2 = *r * s_inv; + + let res = double_and_add_base(&u1, &GENERATOR, &u2, &affine).unwrap(); + let mut x_bytes_be = [0u8; 32]; + for i in 0..8 { + x_bytes_be[i * 4..(i * 4) + 4].copy_from_slice(&res.limbs[i].to_le_bytes()); + } + x_bytes_be.reverse(); + + let x_field = bits2field::(&x_bytes_be); + if x_field.is_err() { + return false; + } + *r == Scalar::from_repr(x_field.unwrap()).unwrap() + } else { + let public_key = PublicKey::from_sec1_bytes(pubkey); + if public_key.is_err() { + return false; + } + let public_key = public_key.unwrap(); + + let verify_key = VerifyingKey::from(&public_key); + let res = verify_key + .verify_prehash(msg_hash, signature) + .context("invalid signature"); + + res.is_ok() + } + } +} + +#[allow(non_snake_case)] +fn double_and_add_base( + a: &Scalar, + A: &AffinePoint, + b: &Scalar, + B: &AffinePoint, +) -> Option> { + let mut res: Option> = None; + let mut temp_A = *A; + let mut temp_B = *B; + + let a_bits = a.to_le_bits(); + let b_bits = b.to_le_bits(); + for (a_bit, b_bit) in a_bits.iter().zip(b_bits) { + if *a_bit { + match res.as_mut() { + Some(res) => res.add_assign(&temp_A), + None => res = Some(temp_A), + }; + } + + if b_bit { + match res.as_mut() { + Some(res) => res.add_assign(&temp_B), + None => res = Some(temp_B), + }; + } + + temp_A.double(); + temp_B.double(); + } + + res +} + +/// Outside of the VM, computes the pubkey and s_inverse value from a signature and a message hash. +/// +/// WARNING: The values are read from outside of the VM and are not constrained to be correct. +/// Either use `decompress_pubkey` and `verify_signature` to verify the results of this function, or +/// use `ecrecover`. +pub fn unconstrained_ecrecover(sig: &[u8; 65], msg_hash: &[u8; 32]) -> ([u8; 33], Scalar) { + unconstrained! { + let mut recovery_id = sig[64]; + let mut sig = Signature::from_slice(&sig[..64]).unwrap(); + + if let Some(sig_normalized) = sig.normalize_s() { + sig = sig_normalized; + recovery_id ^= 1 + }; + let recid = RecoveryId::from_byte(recovery_id).expect("Recovery ID is valid"); + + let recovered_key = VerifyingKey::recover_from_prehash(&msg_hash[..], &sig, recid).unwrap(); + let bytes = recovered_key.to_sec1_bytes(); + io::hint_slice(&bytes); + + let (_, s) = sig.split_scalars(); + let s_inverse = s.invert(); + io::hint_slice(&s_inverse.to_bytes()); + } + + let recovered_bytes: [u8; 33] = io::read_vec().try_into().unwrap(); + + let s_inv_bytes: [u8; 32] = io::read_vec().try_into().unwrap(); + let s_inverse = Scalar::from_repr(bits2field::(&s_inv_bytes).unwrap()).unwrap(); + + (recovered_bytes, s_inverse) +} + +/// Given a signature and a message hash, returns the public key that signed the message. +pub fn ecrecover(sig: &[u8; 65], msg_hash: &[u8; 32]) -> Result<[u8; 65]> { + let (pubkey, s_inv) = unconstrained_ecrecover(sig, msg_hash); + let pubkey = decompress_pubkey(&pubkey).context("decompress pubkey failed")?; + let verified = verify_signature( + &pubkey, + msg_hash, + &Signature::from_slice(&sig[..64]).unwrap(), + Some(&s_inv), + ); + if verified { + Ok(pubkey) + } else { + Err(anyhow!("failed to verify signature")) + } +} From 60b0b0a2dd88982f3fb0b61809b9ceff6d1359d5 Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Mon, 13 May 2024 17:10:31 +0900 Subject: [PATCH 02/17] wtf --- core/src/operations/field/field_den.rs | 2 +- core/src/stark/air.rs | 14 ++++++++++++++ .../weierstrass/weierstrass_decompress.rs | 3 +++ .../precompiles/weierstrass/weierstrass_double.rs | 8 ++++++++ core/src/utils/ec/weierstrass/secp256r1.rs | 3 ++- 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/core/src/operations/field/field_den.rs b/core/src/operations/field/field_den.rs index 3022d66284..0c47f194cb 100644 --- a/core/src/operations/field/field_den.rs +++ b/core/src/operations/field/field_den.rs @@ -113,7 +113,7 @@ where V: Into, { let p_a = Polynomial::from(*a); - // let p_b = (*b).into(); // TODO: is this correct? + // let p_b = (*b).into(); let p_b = Polynomial::from(*b); let p_result = self.result.into(); // let p_carry = self.carry.into(); diff --git a/core/src/stark/air.rs b/core/src/stark/air.rs index dc181b18d2..fda12231fa 100644 --- a/core/src/stark/air.rs +++ b/core/src/stark/air.rs @@ -36,6 +36,7 @@ pub(crate) mod riscv_chips { pub use crate::utils::ec::weierstrass::bls12_381::Bls12381Parameters; pub use crate::utils::ec::weierstrass::bn254::Bn254Parameters; pub use crate::utils::ec::weierstrass::secp256k1::Secp256k1Parameters; + pub use crate::utils::ec::weierstrass::secp256r1::Secp256r1Parameters; pub use crate::utils::ec::weierstrass::SwCurve; } @@ -86,6 +87,12 @@ pub enum RiscvAir { Secp256k1Add(WeierstrassAddAssignChip>), /// A precompile for doubling a point on the Elliptic curve secp256k1. Secp256k1Double(WeierstrassDoubleAssignChip>), + /// A precompile for addition on the Elliptic curve secp256r1. + Secp256r1Add(WeierstrassAddAssignChip>), + /// A precompile for doubling a point on the Elliptic curve secp256r1. + Secp256r1Double(WeierstrassDoubleAssignChip>), + /// A precompile for decompressing a point on the P256 curve. + P256Decompress(WeierstrassDecompressChip>), /// A precompile for the Keccak permutation. KeccakP(KeccakPermuteChip), /// A precompile for the Blake3 compression function. (Disabled by default.) @@ -138,6 +145,13 @@ impl RiscvAir { let secp256k1_double_assign = WeierstrassDoubleAssignChip::>::new(); chips.push(RiscvAir::Secp256k1Double(secp256k1_double_assign)); + let secp256r1_add_assign = WeierstrassAddAssignChip::>::new(); + chips.push(RiscvAir::Secp256r1Add(secp256r1_add_assign)); + let secp256r1_double_assign = + WeierstrassDoubleAssignChip::>::new(); + chips.push(RiscvAir::Secp256r1Double(secp256r1_double_assign)); + let p256_decompress = WeierstrassDecompressChip::>::new(); + chips.push(RiscvAir::P256Decompress(p256_decompress)); let keccak_permute = KeccakPermuteChip::new(); chips.push(RiscvAir::KeccakP(keccak_permute)); let bn254_add_assign = WeierstrassAddAssignChip::>::new(); diff --git a/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs b/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs index 6584cad757..abccaf8e69 100644 --- a/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs +++ b/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs @@ -324,6 +324,9 @@ where CurveType::Bls12381 => { AB::F::from_canonical_u32(SyscallCode::BLS12381_DECOMPRESS.syscall_id()) } + CurveType::Secp256r1 => { + AB::F::from_canonical_u32(SyscallCode::SECP256R1_DECOMPRESS.syscall_id()) + } _ => panic!("Unsupported curve"), }; diff --git a/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs b/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs index 9371da8dd1..daf4004644 100644 --- a/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs +++ b/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs @@ -81,6 +81,7 @@ impl Syscall for WeierstrassDoubleAssi CurveType::Secp256k1 => rt.record_mut().secp256k1_double_events.push(event), CurveType::Bn254 => rt.record_mut().bn254_double_events.push(event), CurveType::Bls12381 => rt.record_mut().bls12381_double_events.push(event), + CurveType::Secp256r1 => rt.record_mut().secp256r1_double_events.push(event), _ => panic!("Unsupported curve"), } None @@ -203,6 +204,7 @@ where CurveType::Secp256k1 => "Secp256k1DoubleAssign".to_string(), CurveType::Bn254 => "Bn254DoubleAssign".to_string(), CurveType::Bls12381 => "Bls12381DoubleAssign".to_string(), + CurveType::Secp256r1 => "Secp256r1DoubleAssign".to_string(), _ => panic!("Unsupported curve"), } } @@ -217,6 +219,7 @@ where CurveType::Secp256k1 => &input.secp256k1_double_events, CurveType::Bn254 => &input.bn254_double_events, CurveType::Bls12381 => &input.bls12381_double_events, + CurveType::Secp256r1 => &input.secp256r1_double_events, _ => panic!("Unsupported curve"), }; @@ -296,6 +299,7 @@ where CurveType::Secp256k1 => !shard.secp256k1_double_events.is_empty(), CurveType::Bn254 => !shard.bn254_double_events.is_empty(), CurveType::Bls12381 => !shard.bls12381_double_events.is_empty(), + CurveType::Secp256r1 => !shard.secp256r1_double_events.is_empty(), _ => panic!("Unsupported curve"), } } @@ -314,6 +318,7 @@ where { fn eval(&self, builder: &mut AB) { let main = builder.main(); + let row = main.row_slice(0); let row: &WeierstrassDoubleAssignCols = (*row).borrow(); @@ -465,6 +470,9 @@ where CurveType::Bls12381 => { AB::F::from_canonical_u32(SyscallCode::BLS12381_DOUBLE.syscall_id()) } + CurveType::Secp256r1 => { + AB::F::from_canonical_u32(SyscallCode::SECP256R1_DOUBLE.syscall_id()) + } _ => panic!("Unsupported curve"), }; diff --git a/core/src/utils/ec/weierstrass/secp256r1.rs b/core/src/utils/ec/weierstrass/secp256r1.rs index 0cf80854eb..1ea10fa5dd 100644 --- a/core/src/utils/ec/weierstrass/secp256r1.rs +++ b/core/src/utils/ec/weierstrass/secp256r1.rs @@ -116,7 +116,8 @@ pub fn secp256r1_sqrt(n: &BigUint) -> BigUint { let mut bytes = [0_u8; 32]; bytes[32 - be_bytes.len()..].copy_from_slice(&be_bytes); let fe = FieldElement::from_bytes(&bytes.into()).unwrap(); - let result_bytes = fe.sqrt().unwrap().to_bytes(); // TODO: might have to normalize? + let result_bytes = fe.sqrt().unwrap().to_bytes(); + BigUint::from_be_bytes(&result_bytes as &[u8]) } From 6e18adc98f6cdc25d49c9432c2fd1ee3fef2faf9 Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Mon, 13 May 2024 18:20:44 +0900 Subject: [PATCH 03/17] field --- core/src/operations/field/field_den.rs | 6 ++---- core/src/operations/field/field_inner_product.rs | 3 +-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/core/src/operations/field/field_den.rs b/core/src/operations/field/field_den.rs index 0c47f194cb..eab87631ca 100644 --- a/core/src/operations/field/field_den.rs +++ b/core/src/operations/field/field_den.rs @@ -113,11 +113,9 @@ where V: Into, { let p_a = Polynomial::from(*a); - // let p_b = (*b).into(); - let p_b = Polynomial::from(*b); + let p_b = (*b).into(); let p_result = self.result.into(); - // let p_carry = self.carry.into(); - let p_carry = Polynomial::from(self.carry); + let p_carry = self.carry.into(); // Compute the vanishing polynomial: // lhs(x) = sign * (b(x) * result(x) + result(x)) + (1 - sign) * (b(x) * result(x) + a(x)) diff --git a/core/src/operations/field/field_inner_product.rs b/core/src/operations/field/field_inner_product.rs index 5a8481fcb5..070b174bd1 100644 --- a/core/src/operations/field/field_inner_product.rs +++ b/core/src/operations/field/field_inner_product.rs @@ -116,8 +116,7 @@ where let p_a_vec: Vec> = a.iter().map(|x| (*x).into()).collect(); let p_b_vec: Vec> = b.iter().map(|x| (*x).into()).collect(); let p_result = self.result.into(); - // let p_carry = self.carry.into(); - let p_carry = Polynomial::from(self.carry); + let p_carry = self.carry.into(); let p_zero = Polynomial::::new(vec![AB::Expr::zero()]); From eaf5ba0fc68c713c0f1a790a8c0189cf10a8e527 Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Mon, 13 May 2024 19:01:08 +0900 Subject: [PATCH 04/17] idk what is going on --- core/src/operations/field/field_den.rs | 4 ++-- core/src/operations/field/field_inner_product.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/operations/field/field_den.rs b/core/src/operations/field/field_den.rs index eab87631ca..d15c4e1819 100644 --- a/core/src/operations/field/field_den.rs +++ b/core/src/operations/field/field_den.rs @@ -113,9 +113,9 @@ where V: Into, { let p_a = Polynomial::from(*a); - let p_b = (*b).into(); + let p_b = (*b).into(); // klee-error let p_result = self.result.into(); - let p_carry = self.carry.into(); + let p_carry = self.carry.into(); // klee-error // Compute the vanishing polynomial: // lhs(x) = sign * (b(x) * result(x) + result(x)) + (1 - sign) * (b(x) * result(x) + a(x)) diff --git a/core/src/operations/field/field_inner_product.rs b/core/src/operations/field/field_inner_product.rs index 070b174bd1..47ac8c097a 100644 --- a/core/src/operations/field/field_inner_product.rs +++ b/core/src/operations/field/field_inner_product.rs @@ -116,7 +116,7 @@ where let p_a_vec: Vec> = a.iter().map(|x| (*x).into()).collect(); let p_b_vec: Vec> = b.iter().map(|x| (*x).into()).collect(); let p_result = self.result.into(); - let p_carry = self.carry.into(); + let p_carry = self.carry.into(); // klee-error let p_zero = Polynomial::::new(vec![AB::Expr::zero()]); From c33b991fe93c42dec90eed8d6853bbc49279210e Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Tue, 14 May 2024 11:45:15 +0900 Subject: [PATCH 05/17] change name --- core/src/utils/ec/weierstrass/secp256r1.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/utils/ec/weierstrass/secp256r1.rs b/core/src/utils/ec/weierstrass/secp256r1.rs index 1ea10fa5dd..1037dde707 100644 --- a/core/src/utils/ec/weierstrass/secp256r1.rs +++ b/core/src/utils/ec/weierstrass/secp256r1.rs @@ -130,7 +130,7 @@ mod tests { use rand::thread_rng; #[test] - fn test_weierstrass_biguint_scalar_mul() { + fn test_weierstrass_biguint_scalar_mul_p256() { assert_eq!( biguint_from_limbs(Secp256r1BaseField::MODULUS), Secp256r1BaseField::modulus() From 69ba0212e6b3c4495fe991eb99ccb9833af03ec1 Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Tue, 14 May 2024 13:32:41 +0900 Subject: [PATCH 06/17] wip --- core/src/operations/field/field_den.rs | 12 +++++++++--- core/src/operations/field/field_inner_product.rs | 10 ++++++++-- core/src/operations/field/field_op.rs | 8 +++++++- core/src/operations/field/util_air.rs | 4 +++- .../precompiles/weierstrass/weierstrass_double.rs | 3 +-- core/src/utils/ec/weierstrass/secp256r1.rs | 4 ++-- 6 files changed, 30 insertions(+), 11 deletions(-) diff --git a/core/src/operations/field/field_den.rs b/core/src/operations/field/field_den.rs index d15c4e1819..e6f1821417 100644 --- a/core/src/operations/field/field_den.rs +++ b/core/src/operations/field/field_den.rs @@ -113,9 +113,9 @@ where V: Into, { let p_a = Polynomial::from(*a); - let p_b = (*b).into(); // klee-error + let p_b: Polynomial = (*b).into(); let p_result = self.result.into(); - let p_carry = self.carry.into(); // klee-error + let p_carry: Polynomial = self.carry.into(); // Compute the vanishing polynomial: // lhs(x) = sign * (b(x) * result(x) + result(x)) + (1 - sign) * (b(x) * result(x) + a(x)) @@ -136,7 +136,13 @@ where let p_witness_low = self.witness_low.0.iter().into(); let p_witness_high = self.witness_high.0.iter().into(); - eval_field_operation::(builder, &p_vanishing, &p_witness_low, &p_witness_high); + eval_field_operation::( + builder, + &p_vanishing, + &p_witness_low, + &p_witness_high, + is_real.clone(), + ); // Range checks for the result, carry, and witness columns. builder.slice_range_check_u8(&self.result.0, shard.clone(), is_real.clone()); diff --git a/core/src/operations/field/field_inner_product.rs b/core/src/operations/field/field_inner_product.rs index 47ac8c097a..efe3b3a416 100644 --- a/core/src/operations/field/field_inner_product.rs +++ b/core/src/operations/field/field_inner_product.rs @@ -116,7 +116,7 @@ where let p_a_vec: Vec> = a.iter().map(|x| (*x).into()).collect(); let p_b_vec: Vec> = b.iter().map(|x| (*x).into()).collect(); let p_result = self.result.into(); - let p_carry = self.carry.into(); // klee-error + let p_carry: Polynomial = self.carry.into(); let p_zero = Polynomial::::new(vec![AB::Expr::zero()]); @@ -135,7 +135,13 @@ where let p_witness_low = self.witness_low.0.iter().into(); let p_witness_high = self.witness_high.0.iter().into(); - eval_field_operation::(builder, &p_vanishing, &p_witness_low, &p_witness_high); + eval_field_operation::( + builder, + &p_vanishing, + &p_witness_low, + &p_witness_high, + is_real.clone(), + ); // Range checks for the result, carry, and witness columns. builder.slice_range_check_u8(&self.result.0, shard.clone(), is_real.clone()); diff --git a/core/src/operations/field/field_op.rs b/core/src/operations/field/field_op.rs index 9c8943d0ce..4cdf492b1f 100644 --- a/core/src/operations/field/field_op.rs +++ b/core/src/operations/field/field_op.rs @@ -212,7 +212,13 @@ impl FieldOpCols { let p_vanishing = p_op_minus_result - &(&p_carry * &p_modulus); let p_witness_low = self.witness_low.0.iter().into(); let p_witness_high = self.witness_high.0.iter().into(); - eval_field_operation::(builder, &p_vanishing, &p_witness_low, &p_witness_high); + eval_field_operation::( + builder, + &p_vanishing, + &p_witness_low, + &p_witness_high, + is_real.clone(), + ); // Range checks for the result, carry, and witness columns. builder.slice_range_check_u8(&self.result.0, shard.clone(), is_real.clone()); diff --git a/core/src/operations/field/util_air.rs b/core/src/operations/field/util_air.rs index 54ae64216d..af023096cd 100644 --- a/core/src/operations/field/util_air.rs +++ b/core/src/operations/field/util_air.rs @@ -3,12 +3,14 @@ use p3_field::AbstractField; use crate::air::Polynomial; use crate::air::SP1AirBuilder; use crate::operations::field::params::FieldParameters; +use p3_air::AirBuilder; pub fn eval_field_operation( builder: &mut AB, p_vanishing: &Polynomial, p_witness_low: &Polynomial, p_witness_high: &Polynomial, + is_real: impl Into + Clone, ) { // Reconstruct and shift back the witness polynomial let limb: AB::Expr = AB::F::from_canonical_u32(2u32.pow(P::NB_BITS_PER_LIMB as u32)).into(); @@ -26,6 +28,6 @@ pub fn eval_field_operation( let constraints = p_vanishing - &(p_witness * root_monomial); for constr in constraints.as_coefficients() { - builder.assert_zero(constr); + builder.when(is_real.clone()).assert_zero(constr); } } diff --git a/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs b/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs index daf4004644..59683145a2 100644 --- a/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs +++ b/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs @@ -6,8 +6,7 @@ use std::marker::PhantomData; use generic_array::GenericArray; use num::BigUint; use num::Zero; -use p3_air::AirBuilder; -use p3_air::{Air, BaseAir}; +use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::AbstractField; use p3_field::PrimeField32; use p3_matrix::dense::RowMajorMatrix; diff --git a/core/src/utils/ec/weierstrass/secp256r1.rs b/core/src/utils/ec/weierstrass/secp256r1.rs index 1037dde707..905552b638 100644 --- a/core/src/utils/ec/weierstrass/secp256r1.rs +++ b/core/src/utils/ec/weierstrass/secp256r1.rs @@ -106,8 +106,8 @@ pub fn secp256r1_decompress(bytes_be: &[u8], sign: u32) -> Aff p256::AffinePoint::decompress(bytes_be.into(), Choice::from(sign as u8)).unwrap(); let point = computed_point.to_encoded_point(false); - let x = BigUint::from_bytes_be(point.x().unwrap()); - let y = BigUint::from_bytes_be(point.y().unwrap()); + let x = BigUint::from_bytes_be(point.x().unwrap().as_slice()); + let y = BigUint::from_bytes_be(point.y().unwrap().as_slice()); AffinePoint::::new(x, y) } From a9669f59cb1a335b0e98b27f97bc4693c49fbb43 Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Tue, 14 May 2024 13:38:53 +0900 Subject: [PATCH 07/17] fix zero error --- core/src/operations/field/field_op.rs | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/core/src/operations/field/field_op.rs b/core/src/operations/field/field_op.rs index 4cdf492b1f..06af3ec83a 100644 --- a/core/src/operations/field/field_op.rs +++ b/core/src/operations/field/field_op.rs @@ -1,6 +1,6 @@ use std::fmt::Debug; -use num::{BigUint, Zero}; +use num::BigUint; use p3_air::AirBuilder; use p3_field::PrimeField32; use sp1_derive::AlignedBorrow; @@ -117,14 +117,7 @@ impl FieldOpCols { modulus: &BigUint, op: FieldOperation, ) -> BigUint { - if b == &BigUint::zero() && op == FieldOperation::Div { - // Division by 0 is allowed only when dividing 0 so that padded rows can be all 0. - assert_eq!( - *a, - BigUint::zero(), - "division by zero is allowed only when dividing zero" - ); - } + // Note: Zero-padded rows are handled by builder_is_real checks in the eval function. let result = match op { // If doing the subtraction operation, a - b = result, equivalent to a = result + b. From 211877a4513ec2a078dabb1b58760c61687e8184 Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Tue, 14 May 2024 14:41:36 +0900 Subject: [PATCH 08/17] change syscall numbers --- core/src/operations/field/util_air.rs | 3 ++- core/src/runtime/syscall.rs | 6 +++--- zkvm/entrypoint/src/syscalls/mod.rs | 6 +++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/core/src/operations/field/util_air.rs b/core/src/operations/field/util_air.rs index af023096cd..c8c552084c 100644 --- a/core/src/operations/field/util_air.rs +++ b/core/src/operations/field/util_air.rs @@ -2,9 +2,10 @@ use p3_field::AbstractField; use crate::air::Polynomial; use crate::air::SP1AirBuilder; -use crate::operations::field::params::FieldParameters; use p3_air::AirBuilder; +use super::params::FieldParameters; + pub fn eval_field_operation( builder: &mut AB, p_vanishing: &Polynomial, diff --git a/core/src/runtime/syscall.rs b/core/src/runtime/syscall.rs index 37b9ccee79..8eea31c8a5 100644 --- a/core/src/runtime/syscall.rs +++ b/core/src/runtime/syscall.rs @@ -142,9 +142,9 @@ impl SyscallCode { 0x00_00_00_F1 => SyscallCode::HINT_READ, 0x00_00_01_1D => SyscallCode::UINT256_MUL, 0x00_00_01_1C => SyscallCode::BLS12381_DECOMPRESS, - 0x00_01_01_10 => SyscallCode::SECP256R1_ADD, - 0x00_00_01_11 => SyscallCode::SECP256R1_DOUBLE, - 0x00_00_01_12 => SyscallCode::SECP256R1_DECOMPRESS, + 0x00_01_01_11 => SyscallCode::SECP256R1_ADD, + 0x00_00_01_12 => SyscallCode::SECP256R1_DOUBLE, + 0x00_00_01_13 => SyscallCode::SECP256R1_DECOMPRESS, _ => panic!("invalid syscall number: {}", value), } } diff --git a/zkvm/entrypoint/src/syscalls/mod.rs b/zkvm/entrypoint/src/syscalls/mod.rs index adadd04b96..b7447ca814 100644 --- a/zkvm/entrypoint/src/syscalls/mod.rs +++ b/zkvm/entrypoint/src/syscalls/mod.rs @@ -109,10 +109,10 @@ pub const BLS12381_ADD: u32 = 0x00_01_01_1E; pub const BLS12381_DOUBLE: u32 = 0x00_00_01_1F; /// Executes the `SECP256R1_ADD` precompile. -pub const SECP256R1_ADD: u32 = 0x00_01_01_10; +pub const SECP256R1_ADD: u32 = 0x00_01_01_11; /// Executes the `SECP256R1_DOUBLE` precompile. -pub const SECP256R1_DOUBLE: u32 = 0x00_00_01_11; +pub const SECP256R1_DOUBLE: u32 = 0x00_00_01_12; /// Executes the `SECP256R1_DECOMPRESS` precompile. -pub const SECP256R1_DECOMPRESS: u32 = 0x00_00_01_12; +pub const SECP256R1_DECOMPRESS: u32 = 0x00_00_01_13; From ecbbdb6620e426e932c52d25074878f6b906a6f1 Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Tue, 14 May 2024 14:42:30 +0900 Subject: [PATCH 09/17] change syscall numbers --- core/src/runtime/syscall.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/runtime/syscall.rs b/core/src/runtime/syscall.rs index 8eea31c8a5..2453d6f0df 100644 --- a/core/src/runtime/syscall.rs +++ b/core/src/runtime/syscall.rs @@ -105,13 +105,13 @@ pub enum SyscallCode { BLS12381_DOUBLE = 0x00_00_01_1F, /// Executes the `SECP256R1_ADD` precompile. - SECP256R1_ADD = 0x00_01_01_10, + SECP256R1_ADD = 0x00_01_01_11, /// Executes the `SECP256R1_DOUBLE` precompile. - SECP256R1_DOUBLE = 0x00_00_01_11, + SECP256R1_DOUBLE = 0x00_00_01_12, /// Executes the `SECP256R1_DECOMPRESS` precompile. - SECP256R1_DECOMPRESS = 0x00_00_01_12, + SECP256R1_DECOMPRESS = 0x00_00_01_13, } impl SyscallCode { From fe9972f71ce3220a76e59399d87788327ea455ce Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Tue, 14 May 2024 15:25:27 +0900 Subject: [PATCH 10/17] i am incompetent --- .../elf/riscv32im-succinct-zkvm-elf | Bin 117088 -> 117456 bytes .../elf/riscv32im-succinct-zkvm-elf | Bin 116660 -> 117032 bytes .../elf/riscv32im-succinct-zkvm-elf | Bin 124224 -> 124280 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/secp256r1-add/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-add/elf/riscv32im-succinct-zkvm-elf index 607176f915c1f8ef268ddee4437f94c5b13c9f6d..065bac67ff0ac18a51f90fe13da05f04c6fceacd 100755 GIT binary patch delta 20411 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 C1S75h delta 19393 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 Vw!X`QB7^LlO|5Lv;&IP&{2xluhVB3W diff --git a/tests/secp256r1-double/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-double/elf/riscv32im-succinct-zkvm-elf index 2d5d618fa58506fa0e9c8146af903b267ebc48d2..85a4feb2498f8685d3c9714ceb19ae3d4f6ff4b6 100755 GIT binary patch delta 20573 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 diff --git a/tests/secp256r1-mul/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-mul/elf/riscv32im-succinct-zkvm-elf index 8f89dfbc1a425b2e73472f81852f165b4ad5463f..4051d123184eb5c2c21afaee884910d2424c5d60 100755 GIT binary patch delta 20377 zcma)^30xIb`^V22?ywjd2)F>s;B~_V?|!*1i6&)6W@e>j30xp8Oj9y4?Ba6WE$paA zQ%jS|3QNP(l8Oq<-q(7qth5)E{<-DyhHv(!rQQGU%$snK?u5YS(_7vjfANQj<+b$JEP(Pax zd4DVat?r)`5*I1o!}dpxhR__ffM&5*qb!m2s>bB6`YtMhO7dM*XIssQrgdye`}Wjd zwV-{ZMC)03#{u}euj2?LZJ(G)>#N2l+Nje%-kiSC6laPdW@UD`xjPM4Gn4(J%w0By zo4eBRIQe~APsxkwcCVUoL>BufWo&H2-0pIN{lp&PZ4(|7 zC(8}YqO_+CY`D@7e@hfE{?;q~I)2Aw6UsLcju@US%Ut1hrV?}H$`fq=bj7abDElX> z?#%a3Ve(dqZxx1RH%*TrHSTaqnA9$II)Z(F8Nt269!<@rGgxivdx+G$E}Nnr2_~+4 zlv&JOVzVX)Wb@@bRlLB@yk<*mJ)8eiz}rqHqVzbq?lh|~_e1&v=DVe=Suoifbl`~A&+k$B-(oJl6kFE>=xb{%SJ<)0t4lNYg=v|erH z#R3uKrK)&A-Lk6ew9fK~+0)y9Mo1i`o5NBm`GI7L`+&K7EHQVTP0U@E6So8DOs0l7 zzbPy(JjTRiLO809R;@I5fm{|nprWB_d;0S?w0ndxxrUf~Zj{Wuwn@R7Wqren9vRuj zxnc@>tm=l}xq|I|#7+;h%a0_X${l75NIM*tkU+f2ay;|b61S*hc-@LPd59@kSWP#P zSy(s!VOBaL1!>mJK$tkYIO9{P4!J#QORsA*_t|C=y;4ms%cso>dSVx<_QqhAZ#Jse zh`I}`XG#C`pUgYeu=sn5Yuo~VZzkuM;=-*Fe3aVa52-CKbaGuMR$kJsZC$dStH_DT zSzXw!l9`gcjyWFt0<{p~SolJ{H!(b1&D$?;GI!l3nY$w-eW)Z7p=&i7B0ENzd!k+WK+oHgsJlr=vzrEHk>_*MCyX!4@?iO{^J8!gG9rhKw}SJkHM^QL^Z z`(VX%=d3%6U!cu{1xm#*#x-mn4K=kFS7jE_X%0;Y?q+Rv+Yn>=5&_i zm)NK|w|6?s7DbRa6VAoqgtZDMaZxgf^LHTTKAY=V&796{f2YkG=Ong~pE7sd80>hm zyqR^Fn=WNlvf*=WlK&JdojZY^Wc72C{Otws#k_ZO@Rl-7v4S zNL4crK321f^Lik$;!lb?$^1VB%zfTG!G`&5iSqV8%%I$#C&|02F8Hs*R9D9w3wlXe zwJc}B7qN%EbL3W{PTH(-hz(mf00XIPVP~oC3$|h5Jz`WXJR(K|>SOMX5ghDtr!gvt zxfewws5ZbtMnmLcn^gA!8@Sj^PqCcE&q#GO?DFC+Qr-JZS<+6bJ5-girOm(mo zH>D5H+8^iF^R0;#a<#m$`6zJ3ll?_i_dnTP%KC~$^DH*#so7HaL00qBXi5IMD!%-; zFiDQBieK?Lq8H0ft?VqzC(K^(ZTcGV43Gc~yVWyvJ5`m+DSdMe`det*;uhx{D;$eZxwg$@{%7cJ`UX zR{o2@pvhNQ%-VLMh13?=*4#pUP+&U6e5!S(@Q@Z7v(}5QzH99Rt>n|eeEdJNKI?jQ zuOm}Pjh089NyJ-?yNI*i(wGZb>AL${A2v(pF*?vHQ4267tV=>?iC&M+C9{n6Zot&_ zVwT8U)PZeS-_KJ&r7`8#V8iLo&i;GOMm~$KAAv9;U@{vksI^X;pB*jvTeHj0VuZ=8 z&vP!x--hKshyHhM)#~TEn`~L{a*OB?nOoEj5ssNIe12OzKQUKgK+g{+?ag@hk`Ei* zsxCa9HEv3j!egtVD`rYk*1K%siyTd&y!4{fYGub@uekVKjDyn~qC0D*H`Q5C(vU{T39}6cEj6m69 zH3F_wGPis95th8=L3)%e+|pl?2e8^LK6-==d+qL4#|LQrDzj?yYlG1l*{Ro&c>;^x zIzq~t&c<$C)EBtOc|Zo4OB8lNg2 zN;NMvP2)Ll+=aY%z0vO~oAs(q-J1HRt8RtKs4CHmCRR;qdP>#rPG{lUCmRzIe^cg5 zw~Ne=Z4b>nM>s$p*E45*-VAk5)z(aJ%3;Hs54R}qh8>~h1@p>nvfj5tc$&QPs`AS2 zYAP>(XXtY)n8R(&IqZC)MR_moy1KjpP1b$h66KY?b#-~xrt)gvy1KmH%{jc?vb^x! zBZ zt@D|kLONewFRpP5>YihnH8Z8U4XnBb6W{afSj`MU+>lr-e5~V zMd#eksz1dt;7!)^Uvs3aomG|p8cn6Fx1RnC!*v%+{%oj}^)}1-3{R}L+2zkh3d`)z zhf4n4to-wTh|BmdR!JXjVi&&HA$_!oRUQ~AE|(8rzS+$zUq0Dp&u(+q_w^C6o9+8@ zq|hXPm7ZAl4gx2+zf{DM?F434$*l$sGfe(hcegqIt~&9mqPln4zOP2M^S_UWhAB?A zU`{S;6||P$W0tRDji9DI?+{5bY_Xzun!+03&VGW083j6U#x=Y9F z*t{coZC}`f{3Eu1p#K{oK%%?Xu} z3W>(z-h}fk?v)D)8O+un8$buML&t8Uku3Fi3hl#&9PdrD+2rHB6H4$_k_zkT)4csA z=T3SkecE(V!L}T4Pit7+@wr;w!%y^(E&o%<4eXH4WN;rM%L-{lBh=HB#v^n?eqY8fSo(-mScWZNMH8w znGS5o8FSQdkP{ZwZ1Nd5EoU#BG1I;5<1;;CFF+FqO~mD3{(Bic+k@Iz+S$Q$BAay9 z9kl|Q9Ndo95Tty(2yvK?QrYnWHlZp!R!Mc7TEBG;mE@b{6C(sjB z$A7ekb&4^G?mP{Hb~V;-{@jmNv*SO%>a!qi zInIqZg?%Q@Dx7<89>jSZ=Z`oevBHhVnS#@S^Cp~QaTely4Ciw=zsA{!GeTW5q>^M@ zry^~4TnFL26K6iohjFe$&+vz*n#l&hC>XtlYc0-0IFI4{1!n{tZX3aDmuyi*QK=*r zbsEJcUz(1Pe|xE))TUKc+h01!gV{k7HaTPJpul*H5rfNEI6@By!+8koC z1!q(UFUNgnoE2=*ukNUQuoewc%|8Csew_kW@kxXH45{cVZK6}vw5=4SsGzV|6hm~I zGR@Ya*|dpf{V(TroCg%{uEMnot~r|7D)#1ObK2Opfq)oL;t&P(!Feh-5D@c)ID{+{ z=RroV#3k&7Ms!%$y!hvCJ%4qg%x=>ma))iO|i}CEX-+G|GKlWP+ zEoE!)cQ1Pjf8*Jq-%>g{9u5RX!4fHBhRvp=18zql_C+iIMRRw^Vr5foK!l4^}3SC_6JPTg&FLtKxgUlqx=_26IaI2Na^fj zD-&sAyM~!9W3mvBzEd+-j-Z`s&dN!&pVT;uca~_om0M|K+SVrm0f#6LhbSu=)!Yx6 z9#kPyAUnA7TN;kzgMG1PKz#7a6)uI3Z=6hS4~blMse-_Hj=bP3k*!NgyDqqgO#xx)R1kkn24{ z=xZR$=d;6T`-BTn>2VXPvrxtJEl|;VUKd7FqzlXVi7?tdq2j5Q(aecJ<~-Fz;}W)q zs6^NnLRHOgGEsD#@<5;`L}Yld;|O&P)Wi5}sOfgT(L{UDt^8vXs;mj+MG@$mdLTtrDxq7)CnKxGY9t#TG*Luv6kgOreRd^( zRz`ms$lrlk+F0HkClR}zm`z4Orii3CM2Q0-8_%!EG%0P~>gL!9^CGA!Ak#xFN-2YE z9Ul^|wtH?knoQx3fI6Di1_EPXK*qFba_KCLGx-)_oXtNGmm+>nTq=3%2sFjnO*}n< zw(FQ(5eSrsw8Pq1M0G@M*R>MOac=}|-!b}ymTKYlKB$ZMvIv?a*9bLV9zo-HO$0S{ zN`5gAz}v5yTWI_gJcIi1Z$*xlms-Y8)OHlqIXpI!#`PTqwWzE(gfAsfjfG4R0&T_+ z@^UrFZIQ@vKhzt7>T-%Y2z8A}#%Bw4!{$I>ok86Qbw1w)b=s+yo4bMVB^e<<2$}9g zSI8`oHSqJ1=w30rV-)R&%S}-T=2AW>3c_N(Jc`D3occz~_PvN?rI3x`LnK6Ke-t&L zLw<>boz_(a0%Lk8MTcCS8Py2)8(dssyUbkcoS7i0e|wjCLC|JG}xT z9NQr?ZP$89NK5a7Jd-bLg)mh>t#t%-mKDh^i)8#AsQV7v5eSTjNbe`2^geh7E`;16 zoDDW>ydA8+iV6Kua0T?3T~zy4c>dOaaZ!1uFB@GpIrv&3Nt7%Ap8_Kt5xfd~ z7F?$BFC&8v0ST2P;uJY)hl!jIoEwEDY-fekLnhMybQ`ATPRI{UBY1+ro^Ot!F}|q= zX*qaIisls@JqX?px6vG`+Y%n+8=zOcgyaVB=g^DAx2X11@G-F7u|67&@dj4g30_Ct zPKbiHO;s;RK5{bzCCvh|3_KMDShQ+<39ir!L^ZO;pr?W}HGSk==>15q7cc^RF(kjG zVD-gUI0y$m1*@;SD*Ghz3_R8k5y!W|`}(G;HKb^+C@d>_c2(3TkQf?y-~)Ie)@!&7 ztiK?O2(-Nuao6=I@D|J?qre^20wwY+cwVX&K_6=LGXx7ESPBEtPAou`y16a>M%qaUp^u406>>cARJR@!J`Id27cYZ`waZO zfy2djl~9M;Hq}2k3Nj4_;|*M5;1vemYT$haK4oB&FHZL-=zwD2fd(FH;9>)p8@STI zdkyS6W)P^4xsVVg$G3EFuz~Xo>^Jac1OKxn`vPZL3IfpyEeo_7_)Y^qYT(rd-eKSa zE%^5Hf&aD;oDambYw19`fwK+#fPv@pOC9k#SjRgi;v#cTBHj^4^GV{ehp!Qr?)+nM zna3}Q%db2w371knE(tH=B$3ZdqUrQ;{xXpMmw$|l+$#z1G5lN-P0AXBTlb~luLR=Z z=L2647SB+@uYj|``qTVN@ZJ(ImT+P@&;xHA#r&3J+Pm9m+}6NU(UQ&r@5j;y3lE$! zIRduu^~vbfzi3p(%(F zRt0ccEujdk|L!14i1`Ds3gQLNEbgRM1e3?Rf`%dCk|D{Ekw#Cbj{)>y?L0}t_iU*P4%U(i0 z)BBSoliTu9;U(J31p=^k3Rb>Yw{;cvShqERkLeAIl`Wr+t_x05^$<+to>V&chIuH* za;13)ybhih;_^4(YH+Zo5|L3rZHV3iHeKQGrqcetdvHGyx{jL9^TGOWMWPPdzz3l3 ztLf{(@hDsGW%kMN8Fi|Wf{j`Pu6R-*4X_uDe0dsHDHd6jb z&;jUGgS9iT_|+?i1lu3Q8yQ#)Dma3_+=cd&&D}5v_~9=2o;#9X>Ou#{u7zYO4E2Vq z<2RWxuXN*&;o_?(MB6>3s6Rppzg9m)$S!cQ=I6)Yd0>aeKcUzIV3WqRB`vwvV=b8* zcy4zj)DCpkwt?qb3Ie;irz?Fu>uZQ}ers+^sRuq$h18-i_$*j&%dy}KA^N#s2k+aB z-s5`>x2vJjoAMA?|2a=Ir3q7_2}S8m*$+GnoD4UG{!}hPvZ}f1J}*M|gkEpDU(vLU zOd)7NwP`H~S^f%zWCqzsCO}XDLA=%%Ry>S;__RXCXbGZc;wuPPYkTqnI0hLuX!>8l zq5|R&ePz(&c=OX^11f%UGiwlp-qFiP&`i@MV()*-0K=GD!g0-glVThq+@(dCYD zh18-P(HCa$v>tfKJdJo%@>_b)0luLaxfS|cA(_aU0!#`4trg%&J$M5=5r^=!GkVuG z&{K_b!P#K7FGAl2kyr>8eL&dX2Hqc{KL*Zu2E70oz#|`-H7i(v`n*Ac{3qZ5(IzkO zOW^DfJ`FAj$*`{vp<1huKEVu0F8H5tSkWA)0LR1LrSVDdc(B?Rr0XTptBjD>AV|>+ zCW9Nmy)@nm)_>F$H9CRd>4%t{CH`?wJimwV?|ae-3ER>zHg$K=)#}0f`Mqg)nnj2l zpHs+YT*UJ^hp$OPV|)woLH%b%QVSb5Qy6a62BVSWUGITml}e z@s){qimp@CAL~R*XFq^iJc}MG3IkvJ1U}!OozY>@E;3m*84Vv5KCU-?&vz~6_|2%U1K9`< z=1dKmiCjgA2QlYQeL+#bK&l=WW4v!v$U&_kec)4@n&+)#OqXL(jHr=FUk`4mP)Ipg zq#uQOta=0HyJe@2Dg-8!haDV(F*twgKQV{qCJJ)jX_oqhZ{700K6~6 zflv7Neei4A_o(g~_<=`{+DP%3WvY3nz6i=-+-~QC`qBYI7;cMTg^Oxck%xG_((H^0 z?Q;O_0bkVi=#8hx=9l2T6m;fY{#IXltNabpJ9z7Kgjr5UeUU=U(_+n*&OPZgrP~7# zj|~g{7%lqDN^nUC*MK+hS?Tm<-x=KM+XsYcyME2v32yERgSENAM{*$8)hr;J!1V}{-sz5m_kqPB znz#o#b=MI4Pv@XZAOt~snJ9BHC|*_6Ei0l0SIq;%ArT_Mll+7vqXI#DuS6;#=n8>8 zTm1kQ1-8)&w9dzT2_CHRbnt38pwA6EzMn57W+xsYP=gP_LRhF zd>kzHm+1Oy?U)I{djIPW7W+=rSRnrbu-Jo=5KQkQ`=uEH-i?PLxSeJ{6fAb*BxpPt zEOzFI2&F5bQ1dA;@x&!|Ki|spllXOI=^!-Vq$%cXTeM*9-fYtp;T7i{V zpA_%Fb4{BUt0rQV_?kLiP=5>{=OkF7M@NbT=i&|AD)z34->W7vs5yi0E@r4mh-ct>7`x2Nx(3`7gK{d_5cz6?_H}QV+h-MQ^me zl#f3Dj)Fx;F#8kWd0^fD9lAO6V!3jNcXZRixk;X2CgQIU4>9ol23}_1R}B1-fsgUG z+%zSZ_D6GK%a+K|H$U1H!Qjqy>)LnqLU zJID2>*V5eAq2BjF^Rw%dC($r?@$aCSk1Ho66)c`@qPVr-WU#DpkL8Hmr@@7|==W2= zIbe}q@G1WB0E9>$L`WJxHvp@Zez?u%tq0PiJMPAC6#ksX zR4d$%^!gz}_B?nhpM|XDeYh>=>v5a#Gj3NPSH1DOT!*g8KY=Rt7ToIF@q_~<{L(<0 zlDZP&3Z&4x&;OxZ!Qv2p)Ns!r+ArZS%qk()r`1S2zjyIjgOG986?i6n);#>}{N+J( z!fl5Uy~-~XvH>*^(Rl!7)gc*=5-R}h5EYti;Kc@hiI2Muui&+O5iSXXGedGiZ6*ok zpInD;XbiXYAvJmje2ljqjPHFXar+;r)DDBcZHHj03*kZF4%jQG_6X=Ff*YZaAP5GS zfd}%*gXtOhUECJ&dovOL?{SM*;MNyE6ss3xpvQkOSl`tsGMEI`_cID!0oM053Vsi) z?_m^t8mw<(6r6x5O5e;V_%U?h4PPp1>mkTKa_v)u^9s5Z(jM58=pF zgm^JdsBYqqq9%&>_15$-baqG6Y*uK&F;q%H60jeytEk41O-@3eG^t^$@NH z>$_HBkYNRQom00rksaVrhm-DU>F_MD>M+VzJvu4`@L16}emt7sGX)>~g8CbAqd*^{ zaVa?C)8N`p)TkC*d{j|){R@t`7fa6&&IX@FgvLt2{HB9PAwM4?t2$5#LGr&9vO?q2 z;9+&>bXpUb??Vkxpl*LJI0q5yquJL8{rk;LpiF4lBxT^x3LF;teTuKC#{F|(P>gS* z=#`=d4}nY21fs^VXoB{6_%xt>1`)mbK5)a!3W1qwe~lLr*rJeOG|109fH#4%=1$o4 zL5!N&3MtdRngxH~F@ab$s^D8>^+ieje7Ch!BPqB4#2He!O{x;Vk75{VHJGxr<;-^NvXGe#5mBDR8`lTT5qfJm^k1U_TKd$d z@sDdtziFNttDi=jqrha%;}QJO&2(;z$DQFUEVMc-4v*7ex4HTL+vuPeZ=uKLv1hn4 zJdTV4yR(qLl}$5Z3Z41(d~dG1z-4jU@^bB*-a>mxRtr~ZXFT&$D_n@;%-Ho5QPS#S=%;$7AeP zd!DV(lWVcqTo$`MSjx_Sjifcw5Tmz!z4t$oZY6eCvF*WvV%Nk+CVQMSyi>{asn!WI zADl5cJ>P0`+im#;Hj6hu&zT#no+sCtk>_wb?1c`yJ;P)3W|8#l+=r$-l%8*M6?k2C zugl}M+VZ`&j0~$K&*m<)T0AzJ&FkbhjHXUso;%NFDX_Q@Gn+fF!1=e6!_~i8P`d3; z>hQ~GIyBCm=grM<)0vfSS#>+LaNq5;gRjtKcjVd%owh=6Zm!jx*W_Vd zzSZOLLRw&ViQ!eB?P*|7Q(98OPx)0W}1+pKxEJg?nl$wS9TZ*t==Ej_x!S6liFnOZG> zY-==aYO1TVHJaM~C|BQA)w0_E$o6Ve$KN*1_=AQB6FvUu9dul5zSr&b+Pn@+hBMb< z&&|)`*1Kr(&VoDXDVkGYDJ-zNEmpV3mFKb93)N9&v8b6&omSwTGI=WgdF1r;-?y{> zr5)cgmUhVa{nU=XPJQK%QwMwCpZUmd8TW@}2gCMfsdug)M?W0W+hWBia(N3Jxvs)| zOmkW3MMaogtTv0sW6f|`EG~P7)!`EJC10|ZPKa?j3f#7WJV!>Z!=B-_Tlp_*>9Uyo z47byhTj0oZyPP(g)xr5Xx+JF1l9y*GaM|3LW*m+JCx37Y?a3Rq&@M4~xfyn=yP&{g z^X6h6weh9v>1VyY4zJVgwj-Waw>PiQu6yHjxihRbyUT5Hy6kq38?Nz%&(bBnznaz3 z?OJ^-7^xns-R*X{-EJ!~v)Retnita@f0DzHzn6vUkF(%!XH$1ffu$g~FvBh;ue<_R zo}0&Rpf~ikVfwRrJ-NAVM}C2`z@bOuck04@8|eM<*5A`S`!a36v&}|2gbw=adC#JG z>c9-ISY8}O*G@L+rs_FVfdSE z;rWvse1ESkoPUzV-^(H6_j53bK85F0JAPXQZD++Y0?%MPdfawrZh^HRi%c(`mi}k) zU0p#Z^u`m#m78I8y6tXHfhEtQxB2fi$c-cE$e4Ujp~vO5IoyRAPD`HE&dXk)Gsf65 ztOYKQ)nU)aXv(u@WCa8K*Bw9~FTYpbh!^S5fq$9BpHy+@-WTcRfpizI`wm}}58`{+ zLH_-B)GVw2IUbKahFkGMSIa%(R&3a><+;c3Z|3lQR9tfSHgTE958)!2vbl7ecJGj% QO^J1A5$mNdN!< delta 20461 zcma)@3tUvy`uEq`%pO6}KtK>sHjX#E;LI>Lyka?JW!};#{Gix$;i4ns=I2C^Ua%=7LW7S%iq)M6ksXLUAZ-Nl97HOm*)Hj$Qe7FFI)F&qd9s zmyM5}(A+!B{i8w>qU*-8_oGKbXo*=&W%hiGHTt-!F?p-MjA=%ty1S|`G@lY))niia)ae~($=+m2FvSszGS6)3OwFn@**o0Q zVUyX?k(v|aLo%OA$X8|LtFTUH2h$eE1aI3T0$Su{!_xc2Z}AFZi-Lny>Ea-JD&0+Q zW*?^CBr0t84F0~_E>DY9_Etx=zZp{+ZKi}t=J;ty_JlHm^EmcM<`6oa)n*<Z0UvaM=fI|xs+Kuj(482 zJT0HHRLZA(t<92KBu$p*?2%! z)2W1@DJsDnXJRrT98E{BZnt!RToxl>^Qr1x*-zixX7@@a*APqBO_HVCPAS~7;4wC7 z`p{O>S53i)Rl^8QU&Y>O1J&Wa+q5vUEmDdQeFeN|3#eG3%`J zZI36&d2o?Ocx5Pr@s;XpFOw+m6UUij_AsNCB!;!C(e~NiW??^bS-?T=h@xa}q_1g4OY&)hpCN(kT2uBx zgP&c220yFH?rScuQ2Sz0-6l4%?C(W zx0k$I*zoyxwmZR=G$RQn>`TprH8+!l7?~slQ;4NU)p1rczkTc9>GO;8Q(Ji-vvk}P z9(c0%S(dUOTMBMtgBRGPy0ffw!FYOxom`M6*C)uqGwkYurKxonwlqhw&$T^X2BEP2ssEA7g{c`(PrKmA9AV4_IaS-^8pcKP6@Z+GFXA85|xe z=P)aYr5i;is5ZeOW<&H+yCffCeV1D3S(d-_Nl8A)t}g8$$u&$_)<%+#ReP2lmjd1+ zmZ!InDHlKgCEQ8DH<=tm!jmPhRm5a@2Uh_MbW8>j1!@gPQCEwJfb}8Fm_6@ciW8ov zPPUSU^5)=s2|?X&O|+1!^+hd0g{vR$Et>lNUniV4@??=^% z6~9GE-W#eDSAT%)-N4SRX)k;0Egd$q0ZTeD>soVa@KY8vYf+QO8oV!peE3>4_A{2Z zu}$l`Pb}RKtClUq`WdT$HuwdrTH9OnZ~fZNl6o@yhyNbQoHja}3O6=qW`sM=^UM|9Dsr+gUed!PDybMLvZpSmAe zkM-R;%b_WxM)M&@iG-_(7m3!p8jB$-T|c4a35#?I(*xZSvlwf_`ZSD|*bNw6QOvW! z4Vbz?EE9Q4Qds4NUb)AoT+H}2+;e)c^Zr_}(Hk-LWsyhWdyJqKI#q2PDb=-LS2tpc zMX?_La7lHs%>NGzz*g1k{?XZF4<6uFF(UF_P)CFrOQ!kFI9$E3SYk#mGLvKrF23ZA zi*8kSb8B|-nN;cK8>(YB&yu9z0apGjN0%tiJu5Z;C^?)gIhDP?wY`KszPPp9@AXiR zZK*;#c-!sB!0K(?Gfysfw(ewtxeZBhw;|Pw&XSx79}}O{%w*YIchd6gM% zCUZRR>L%k#|9c}I*Ndhj-pW=#-yJp7Jl{d8%VG7;qxol9`u2ZHbxwA2d*@WI2X{^+ zoPn~XY6e`HWI<>1NtXV?1N1Xi{z7lbo6Bln2+)&k(2HZ6cj~Q;tNzthFAl(9WanOj z^8^;V<2EVy5F4{&NwTeZ*PX9R-s$YZ&c8*h z<5R^|sph$cbv*y&yWxB9%e}6%*`V6gJ#lSETcN5dfL3J7+z1M~0_rYo;}LsNDTfllpFcC9=M-uYv~a!>@=))Aw9g zU)kLa_4)TiUbw;@Ml^cZv!zLW&+fgxzCI1sJ@$$EO7~q~pRJ+3+I`p8*S*oh{-*Vr zUmYg}A7vu7t6m)(KAoXU<{uD}>ca;XN!`3_uN#|5=zbZ`0{YklGr4XpD?OMh)p54& z;M&&H*X%CQlH`A|12tIqHnIAe8G^I1K@Z7yx8WuxBhAnmSYGvB>W`lyy2d$)g^(K`~%c_cYXOy`?kQY#F~J6MnRV6lTO ze-DGRnjLr#_W{+c>%Zqq!QIu{|2>jQ!9A;vV7k7-(vRFI1^2T2Be-PkV^@z16_!Ij zxKXOx$0|N}M;yj|xK@gKnqB_z6{*?NZ2Qrn;&AmS)|>sz`qAU9%=;}J59u>vKRf)< zP@zfxI6GB7fW%4ej}#3$`@JX$!WKx=pHkn{EHR8+-8czEa&g)!RR>FtLI4x3?kNqZJa18+-9^ zc>(9jWrg%+o9g?}-t4pbTd0Y3I+H=WGVhu0bTE79O!uS`JdtF=dfLOjUXu&%e=z&u zX{3_vJd;chu(!`FU?a|UF_RuYDP$mS3RVwKe4%A zbrX8_udiavr1ZZExru%Hl_=6l{uMNk-Fq%aJ6m(^7VYedbDy^@|5+i?h@k?{qZy z;gXety(jj**l)vrFZKo4U&VeD`+4mD#ZGV^FbZXw4Q6?1?mxyYJZsXT%6Jx_R-?w0QT`g=o5h%i)g<}UC z2We)r*paK2ekH9#Au)HvCMxQI-BcI~sjrtbSssp;3!2JCK~~Rf*Ak=)1$-{WEEsn! zTJjh2{*=x={970NUGrN8UB`CgZ$0}6f357t-!j?`e<&0hE*uSN z6*p)eC8F$bLDbG{L+Xs+4JLeyBswzB59h(s0Qw2Ph< z3dM!Z@`r@YROclyxw>WqO^{5p)#R-yrO~u>O_27IV&|@Tg|_c^cy1`JW7*!g+xs#vQwhT@=?4S zx+qT5=nnp_I8^elQ7miwlBSX7nF(1BSw|5fHU;}A$hLD^6t%QFw=@*0fk>oS&s`#L zHB6TChoWe5Qu(sR{t>DgsLJ>TsCvdNZ%m(1U4Y68*=d|d<^wMY$QAxY6wQc@dps06 z7VfM(UJ*l6dJciIW<}GS=R@|EK~@6U`+S56{dsJK+Mm4CM5EgdufQk~6%G!MNYMc` zu+8TiOvvN={52EpVm`bw6iTH0pO`CaWekG@JVr*c-{(DLn%pgAP1E{IFl!mFN=<^Q2C~SBQU=*xey^EkBw3$m^d#E93#z_+B~(=5 zJIyp1!|8276ZzNTP|oohI)lE&v&12q7c`>@@ARHlu0n zPHqW>W}*VoyMx7C!>I_}gzJ-se*qIZm|sJIoFhX6zHwg9Bs!(XXL46VGGX5^q zS*C4G>rF>0FK=z^b}>P$kX_|1V`vxJgF9nrFS*A{aLPBCF#XD6F#W1{5Za`Qm$BrC zy0D33Jqj-8hhk_#yLC{F5^`inpHZSq5?hMldnpF_-pk{g)3lgaz3yHk{h=lvkMxriBKzGA!I#NNm#ZS zvaWny3!2ccD^!>*>L$z&LzNC$=g0<3JHLSs_d3En8xoPl9Tqu+>s4isa+Z0mu`@^uQ)$B|^qWw4@1H>)vcy!+NN8 zK^B>k9gtP+d8{SvLj(1AJ`gS_Zg9@vSQV`hktzui3mPe&Cv+Cq@g3m4ntmJjazy!$ zg#C|={@_G?1}WF<$AcBR2U(MMpM-%Ce5K8Y(j;p8s7`<3Kr8yw4fY37;MqF8mvE0 z3H>Q>CG=P-RC~PfB?rJbsQhSP2u5hSLd4vXBuW;6&w)`+Z_0#gjq72r`BT2u)16Yyb# zjqXsxrnnYYLa#;%i5L7H^x}S7GLaWO5CQB4t52^g z2PE@K_&rv%kfOVyanbMEQBjuyF*ORnHF%`eTeuvoKJcpc5|I$lI9-nl zZDR<@1Gg1=@O<#XOf7=}wCDr`v3zP1Bl-H-qo#4J#!VL(BKAQu<5D2=WfZ!@{iDn@9L-0bd z?%+4@jtG5L3^EeIqrmDzzvgc)Sl>i|8yh)*G+zpBZxpD!AMDRov@(>u37!|QG!ZlB8ewxZ4>@84BWSYu?Pr*dm02`o?&2S;2j2j*TCNxxLFH5 zoUs3nI-`CyfPuO|z;8_Tv zF>o8)2k4s!z;58727W-WR=*lRxxrwIfnPW9=LWuN;I?9g(l!y0%fNSn_4?HSrWy<$ zGw?P8*BSVm!2RPJ>sJF9YcQB$;8g~G(ZK&Q@Hqp^;#EpyK&>0vAD#sR z3ZZTLo_gTfzEO{wVmZnPA-7iQ9zExDg%0?@y=QJB`5UW|%5k(NgdZ zTwifRf?Xz`ffM<@bozW!bUWPN;ZodPGtB{~^GDm!?n(FIw8t-vcg#z`gZRF7^mcg{ zPDk;W_O!eAbDa8NCDslRX7l#Azl&fe_yQRB9I8Gay!qEgUIy;SABC&O1O{dxM+gx?s~#Qz>%TUL8rOpLUmXM=0#~B-;nqsz0$BeYLgMC``v}>ok0(hcPCpvFOnc}+0s>R;$|xH@FbI3x&((t8(yPWD@9b%~MF*#;dI%=) z(V29>%?nUZ;eUCtr{GGkK9)?VpejP&3w-V>Kb}c@2gc%j2y|_=n1f*b z7b4My9pJst_tf+!z*oTfC`+D)ue*WysiUYEp_OGNx*;ZfEN&V@FWWz z5dS13qhP3Kp_Ug}uwRLD?Q$c7yAKj6@brFZ2qu>K>S=*p*f*H()<_I9MMFfzn8SQIy=nw{)gcY@N`Ms&$R8 z2p$G6e4>$eVaU~Uh18-R5$AO7?ShNUO5~%0-`|Dy33SHHE!Woy$wcN9q3Nhu?FB?q z16~Lgn}}4x==u&!HTHt7A#E%||NT^?5-i4muy-OeyCU>&f%BilD1ZY*6d(n2!WF33 z8x$Bk7XhGv9>6lNm1v6@^zVVkL9Y&eaC`t2KBbTzVTZ&EehC38S^(wXD`1z#{{rWs zygC-7VG?OoM#w4%GBkq`;977ujaP&9A9zKJ&LDaECKhL!g>k%In?HPI7hKEpxSU1D zC+&b{lpZ>U-3jn6{%97iY-Zv89}20$L0qfH^W9nKn9~p+;GbsEw4@eD$YB&tgoPNh zF7Rm{(~YJD3UHbSRlKHJ4ju;{qwyCL@%WC2^0ky$|Bj*?F%zb`6Te+Oi;JckLl z7kbgRLZ5~ScM<`g)_5rRa6|xyx!e=Kr<_A`=O7MThSW|uN{BUE+`skYqqAv7r~4u98x{VIT8x?1;BgUr5WJ8-kxg$8e1lW{0|Q~2)C(UP zz_gVXV;*=2xTVGqfG2_Vj$JbnSLPQQdo%{?L_XT2uQdO}x?sWQ3^%K7!VsT;@?dS+ z;x!=z>l+1RF}Mav(g)q!;2mJGi6PPggE~6G{^j|&g+L0z_A)UoKwFLa;U(A2r(anaxgen<6FxyND-kP z(K7H+y*%daG4RvSchw?DU4qpf`F}~PmlxRZ6XRBh zF5nB1&B7IiLz+!oA-3AE5LMtb1uDJgUjl-RyuWRyvjcr` zs(+IroE3w`XD0EQ^9r!|uKt{h|=?4}c%Oq?1iD2>Jj26D#1}Vu#D52iuW$4et^tcLaS}C$HDG*^ z6TSgQ`SW1$agJWTjT;w9a2w5jAXt2`lcez^u=sdKWLSL#%^?t9^5_L#2aB(I^Z>pE zi!XfiE=fVE^zWBMm)!)`zhe^oAXxo`Nvp5|_bnx_;2Ni`k$fV${6%%{p#2ghZLz4< zW7tNE0vP*$17Cr`IHfY1lR4m-}n`VdiIDHbTlE`{W21&)I|ss+OK(o(Dj2sjQEh=2!y zBP&=9_CO!LagoT!;7agKn*9^Vkh<~LT=W*(GCvadnnKVlwSDh^7lQTpckAZRi`$rE z-07wR3Q}{!PQ+g!&NFbaftMS2tAXD%@R$4}H_a#zpKJN?RhQa3=-zJNNno|{;89@x zt1r?0!r8FOK;ZzAlc_-GGa*8ISy;~?MF2TM19!bAIXD#PhwIO;AO z!SVCpT@e+33_i_&_RusN?TZ^hsM>0#J;3@V>bTXw#oU`qR}4IY&=fqeza@$x)Yi*! z?+@1d^=0ryxWzC~^&=m{hh*S1jqwtxHyuwa_e}3iZ=eMX>cg)$UdMJmj$0wPOVP~x zRS+WMJ2Y{f6V(O41T1UZVkI*9Uif}ljQcym`Cw6A@K^jyAEe0CkC2u;rZ4VXvT_oP%t-?YG=X&LN3}X^3Hc|Nkjj6^9QC{Cf$~J*V@h3zr|HA1Qz7MBK zKjCyHyy%^u*-y30BMu>Z+douDC0Zb|GZbc(5srt6y8&$z z4Vq-&B?f+$Pw$UM^Edbw9FqFyMR-GNCJN?X_s6@nRXDAQXwd;MKD!x!_kd?{`TxZc1w+|ty4???`yCyF8k;0go3YT&a5jvw5#g1!cxU|?Z=@e4&9 z@K1Gvs3WiyV?{_VVswio<}~>9mrBF;5vvRyUNi7H11H?7I#>UQvDV+f_cvuJw3`1o zh-TPs9)aspeZwpy2bX2eJF~hL=?-rt!ecS7hH#; z90*NrDhRDJ@EZpH54a>oA!8B3=Sm=+(PT1c7`{?Oi*^6Iz+<}M-r9tld(nbdA?VwyF=Zpr6h{P)#u(XtP$7yI zz+>QxXrUOnqWpfa|KH(zQNiDW^RpCkMbi%)iS-}lb^BT1A;@5~_Oa| zMfr$;L*U4O3;w1BjQZ7x-Vg#rtY~}%>^P#}Jz!Yh9VZI(aT@1?J@18Y`$UVXz$Kq6 zWTK`&4~~ss>%DlMLWagjVSjgnhr?fBlvbbug7gy#S*`JV;6Zg5bXpfQyALfug}VJf za6VetL$lv3^oJU|z%;&Tm-xYv4LBt9hm}A>i`(bJphO{67?q+$Bf(?P1)|0A=z?Dh z@PMbiEfJ&o#zL&KTk${#y|DidT=IfK2GKCj{X1S@lr;{*=m#)s<|(91vwsX6H$R|| zNtz%5C#CZ-O0^ab1J|Mp&S?&R797O9*X&J`@hil^@Lh=rAOK#+6*5HA%Tuw?EW$fT zt$gM*jIoz6=(H}lX$ClelrPr|Qs&?`04a884ql#zjBHd$jmDGbXmTNp_0bXii z+Kti5cUeeCB{CEZeLQZ4&VxHXuc&V=M1acTrd<{U2O|6ID+nT|(Z(fM=@5|K;*@2m z@N-NP@(B@+}Xa~n4t|Tq5lL8(8|lJ@UJlci+tbc54G;Qds>)jen z?SJGoa9y)(Ie%n(y{Y3bn|l7BBcjBRzdD-U6K}KUIIMP`qrmCUL2p~V+;%rj-!uO% zdX5I1_CgHs++q&~wa-(Ot4=GcO?5i;;UeFZ$y4v2R5UI7_w922qFs1M|Bk5h zbm;txcHv?AI~8m7j?`Q1{)-O7>HcGfMY((S-$UOR*xglJP+)i1?XCg`mRqaSn>}d~ zRwY}G8*>m{;_^5=F00FG&9(8Wr|9@NyWQ@_)GffAcKd9u0-n5{J{IpQDD>s{JXpbO zZin6J^74%JbT+qcpf|)h3yO05?!rQk$LjH8$>kScptr?2>;>-P+#<}eVwcn9aq+Di z=#lOoEEyh0VNPL=yU1B!^XTE&9d4V$nQL`n5pX*^c9+x2FTFq$_}-0lX5h~j#q6AL zt8%c^+N}<>#o=-zQaAZaYihRRe;4=s$(o$)`h)W7r7O@FIPH!?YffQ7krNAhp_Ym3n!u|n>4f;}#dmC@$$NTlq62BaKVMO;TCXF=4l8ow zayfAYa@eqVbK!{p`)N8h&gH^NSm<=%3hOFxyPZ7u8S44-x&OO(;Lnop z{NLsOthncoijN;V)Pt)ypS_uOv=zCW#f8pXOaiCh<}S?j;=jiq&i-F%y|e+N_sh+6 zNcSSY)o&~IyK)K~Zig+`r;qvH>x{8m=+NXGkHcxrwTra@D`FuoS%@Xq!}GV$RQ~A} zI{F@`zp$vtTIBZltTuh}KuD7%G{ From 8278fabba7a9248a51b8eaff8bb1740e61be46bb Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Tue, 14 May 2024 15:37:27 +0900 Subject: [PATCH 11/17] change syscalls --- core/src/runtime/syscall.rs | 8 ++++---- .../elf/riscv32im-succinct-zkvm-elf | Bin 117456 -> 117448 bytes .../elf/riscv32im-succinct-zkvm-elf | Bin 102560 -> 102904 bytes .../elf/riscv32im-succinct-zkvm-elf | Bin 124280 -> 124272 bytes zkvm/entrypoint/src/syscalls/mod.rs | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/runtime/syscall.rs b/core/src/runtime/syscall.rs index 2453d6f0df..eb6b1b9a11 100644 --- a/core/src/runtime/syscall.rs +++ b/core/src/runtime/syscall.rs @@ -108,10 +108,10 @@ pub enum SyscallCode { SECP256R1_ADD = 0x00_01_01_11, /// Executes the `SECP256R1_DOUBLE` precompile. - SECP256R1_DOUBLE = 0x00_00_01_12, + SECP256R1_DOUBLE = 0x00_00_01_13, /// Executes the `SECP256R1_DECOMPRESS` precompile. - SECP256R1_DECOMPRESS = 0x00_00_01_13, + SECP256R1_DECOMPRESS = 0x00_00_01_14, } impl SyscallCode { @@ -143,8 +143,8 @@ impl SyscallCode { 0x00_00_01_1D => SyscallCode::UINT256_MUL, 0x00_00_01_1C => SyscallCode::BLS12381_DECOMPRESS, 0x00_01_01_11 => SyscallCode::SECP256R1_ADD, - 0x00_00_01_12 => SyscallCode::SECP256R1_DOUBLE, - 0x00_00_01_13 => SyscallCode::SECP256R1_DECOMPRESS, + 0x00_00_01_13 => SyscallCode::SECP256R1_DOUBLE, + 0x00_00_01_14 => SyscallCode::SECP256R1_DECOMPRESS, _ => panic!("invalid syscall number: {}", value), } } diff --git a/tests/secp256r1-add/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-add/elf/riscv32im-succinct-zkvm-elf index 065bac67ff0ac18a51f90fe13da05f04c6fceacd..1112ad85879040329ad2e4c720ab86417f0b8c89 100755 GIT binary patch delta 3943 zcmZ{meN2_t8Ni=&y{L;sz!HZatp}y8PGzVJX+tM9wxtcs&vv%LfYwc?AhfkYC-9us-w>R&VA4IeO>hZ=ic9W zp7VU4^SWWV_9tKd%IU}z$-1B=UPM$NAb*8heLOZ#X~+WsCClKn zcr8K8AHnHxw&m_QB0JbW5jOVX=87a<^z2u|xyYY(yV!&hU~P*uEjiO8HPEu8^3+%7oY(b8uP<(CrRKeQx83eentmVXT!B7>aUJe$E6xC|UWZjhM#!`_KI2!N-0=|adbSr=UHIZ!O z(e9?aem8IYKfeBYxI0cARZdPmh8w&DrjpRk%U%MDaGYPKWu$N1> zf_$-DWc)fU3#`0^jV)`v0>r!_QiZ(Fl~0pJEF7W&<}np%hua7sT9H1u368V!{#BuG z4^uVCKcm%&8?>Bf-Bjo*e9gycq26Jt%-LRmIXXW$vOOp_3q>YDoy67$7W1dMjK96YYi*l>~6b3t-Tj zIPmdv@Y_Cv&2Y~qEt6b>avZ))z}ngi{)lsoeum{|;40WmiVBPi$VL{rSr}s#{s;>W zzhOB(T$-pH^<=>-1lFvj$U54+m;=9=&Z1`uTt?uhsU(fYaEx48EwU0j<}sD~Re17n zwO2W1jAmksH=3U;1D1EIloOyO4JWr^kXeOmOq9Uw0fgn#Sy7wzlp>6$$FKz z*xv%1xc0&0w{TS4{WIkP3*|lodpH{s!hm%!ZWSYsf$`Qr2+kqkKFg;=?MZ5Ha*)Z{ z{f-yMV(QW5yF)gGOGl_O<0nLVu z!=dP#0&jtXIGkbmL--IJ9iZWBL@vP(M&ttm@?xlWlyZts5ol+-JDH|2=c)U9a4dR; zKUmAvf#0Z~LF@2KA|_5VPz&I{AUAz6ar^|<|McSQ2_G4)HV2(pF7LiyGN=L9?gI?& z!goDC+hF}~FW*1Ii;+j~;DZck3Y>1^O5q6W?cS9YTPl*h%d;O}Cera6UQw>TBV+it zk`0q=0P{HsgZJD~kPbL$x5oo(Ft9^Qw$*fkTDL_1->{rGwqxqGB3_`Fcw zSXG!Xh{>zPZ@Eq6>F|-UygU-lpkMx_X4NfZY`AxvdRI-!ThCp7UCT+k{uZ1IM+YIb zfg1oO%t!;e!+Rd)W|$k-D3W==8>q<}DBun69r6A~ktbodk-XI4EI7v6Y1kxk_^9j0 z48qw^^`pue`(`r-+h^u5yb?B#>HqEK&_m-@x0)HcGM2U7^^?AVgh#+JC;C9_ODI>@=H@#%`!?iHmBG&%}ulMn{2)eRwn z@^*ON7%jUw_lD=pC1LW(arZlNn}wc45~Qz2A%C98XcV%ogP{vBu=maec?M3}r$t-2 z1MlD?%RKQiQ0fe`f1#D%g8LrQMvPoZ@Oi#y$42#?pbTfhpW$lQpJ6ZT&v3>I@L?~2 zm2eXr&o-05F1X{kmVC?S;T_CrlI4`|63|&KOAR}0Si(YObOGKCFXUh>q{qhKhwxz> zkVu4MNv-jWmR8Hp!TS#KO>SGZ&ZJIDqxwhSE?PLr>gyNzV_W7J2emBtGwg%?89njR z-5I|FH!aq(lc6;GyWw(LU@DM63o1zcoV|h*IIl?RG?kUEG16Fz<(Bt z1Ygy1!z$E$pO+V0Yx!$GU?^YX1Kjdv_!69BGd=^S{a(u@J9KX>fmdm%vih}fD>F3O zaz7kw)RK$;NC0b=@c~}JOTrpxFJ%Zj7)slMW94v{mL@B2tsrB1nr;oI;;HE^EuEG> zg)4~SqxpYL?gJEicXS&HLwQ0 zblNj8nrrnU6^QEpI{e^t)t~!7=JY9PQ!}TfP0!58m^OWCdd6d!p}8B>qa)K(OG;Li zrruYcaesNj<7#^7?{%v5p4OMvt0ngmgfG;qU4eT^+<+dtzr#-&)uQ`tOud&Nymf=B WpAr80DfJ7LxM&MSwh#S|JpThK8mn9Y delta 3962 zcmaKudvH`&8Nk1@ERV53HcX;HLOJ1Kg9J(-!-CcpYGKkbyphI2NP>Y@nm}4ph&FHo zB;-K?se~@pL}En-gbuV6moh+OhhjjaOhKC&NkvOLAW+b$Egix7JA2P^FAnwov->;W zcfR*I_jYXVd3tltCatc&l6Lu~^NSpj2j15b5)l;$$op`!kB3baxtXA4H1a?|NeMhU zq$Oy%3(kTkT0S#FWE=ZOz{XzkOp&Aup8YB~2l*6N9*|?38gJznc1;&)@TpCnB~l9a zw`N{|rJv{a8XSZhSTuj4n%$`?E%G7)*a zyCZ*iCvW;6ma^!n1a(9?Gv{Nt#!KLvB(&qQmq5{zBvhrP%sTohd>Wo;xdRSWYe}*N zx%HGt`dTe>to&IvHm&gr(Dzx93gqWq`B*7p;Q$pdkEzIZxP<`X6}bdAzzJ3!ToHM& zpIVjnYg(ODr{x^$rb3^>*L^%8($!Bbb9Uunj?VXrZ4XMIKqTXewj7Yja69JBW8Bvi zh>Sq4ET4dj;rKCIL4G^nuUYv)__|L%wOHh2J>g@3upIeth3jC1-SCHU0=Vi05c&}g zd^{W8;xqUH+__#$hHFqxz?TVFTYG(e%sEDXoaGsC1#Bio1%?D<6APzU7-SXx1Pczo zZn=N7BuP1H(&FzESfiE#>u7%w2Yw@+Mb8wtoWM^|Ng9pe?()fVB4yYykEz_==*Tat zJ<2I(G?SXV(Y(Bbi{~RxZ_-kcbDOmcjr)NMexjw*@~DfiT(86F&vR7V{SV6(7D{~ve#6<22nMW!jOC0x2GXs8HaMGr&s#ndX-!dk()utt zyI=I;D4`xFeRoK6w4}dUrkoA=tfP0-ZvS?nNdC3k7p1I&cfj!pIu3XGxc5RXYVva@ zG$7O9E53R)!H@X#!z)G3-=661j?}Tx@iQ&iHh|Ap!2}ev{Eow$;=1P`xe|kLJfK|I zIP8nQDe#MM5Qh(0J_jFw;{!Bkwa7(yU`*aEAPXa11C&$v4uQ6}x|3-d^8s~#4epJe z;Ztk4I`A9!6IzR35;1X_fy#s5LvH$F;@Ar7e|T~JHF`KzZ45fe3n;*L1~uT?O=WO% zw|ahl4(oq;`JRW1kZ-YZ95Ht(oMm|=M_9k)U0KN`+?_i;`~8=RwC&;*MT zhO27<=Whhr`lu_Q(bkbFKcGfMZ{4r{5^!>- zaeUrzr>Y-mtcNRJr>fofz=99LH{NpZNy7uD6UeJtTKF-%5^nLao*@!COu?v#k-r4* z9i(M9=icyRGf9|yvfcfT^qR%Rl|+K{)hH~2Q&E^`9eiaD2KL@6|?(TuC3ed2n3c3CbWA{25lk{tQ2a{TXJ@g%5cFtb`lj z5Zg=wuflD=)iU4m2kc3Nup@8+(4&Ae^#PsxH(%AY3Qw&U%FU#-5gXJ1-_z<11wVSmepRPlL3 z&*K@lR^#wA$JQp$xsJCe0kv8CVx+K0e9Od`HxQ<7tW6)R;wYA4b|#fcQq1yuUhR4+*Ra;HsSw-_UBqP k?~AuaO6ye5yNaXrb*lQIXy~}wrjm-Dr|$M)1Y*yB0bMDn$^ZZW diff --git a/tests/secp256r1-decompress/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-decompress/elf/riscv32im-succinct-zkvm-elf index 23a72610479f9a8a2f3d58bc628736beb54930a8..35cc5032bb5b2b6190bac5dc54011cf7c524ba4d 100755 GIT binary patch delta 17289 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 delta 3940 zcmaKudvI078Nk0i2?h#d5*mg&MA<7>U=T2YJkWxGLS+;>fIv}^BoY-uLTEvVHh2OA zizPfNj~fhyFkB>-C{dA{wzQx^N3BM*P#GIa+S-4Rv+t)}ct35OR`st%rbd*0V{zoeGj5j$Mf6u%GDJiW8K(SKTo6;_U(NSu7&gL{`tis zM`1s|hpMjT0Z(7evBYgrbwIhNO3=G0u>X^C;_%w1x+#L= zaF&h7h98RTe?bf7m6Y%Hj7Svr{oe^^ps&N*A0ii7s3!pCX9{n`k0}5Q@B>lf^Y<@ZyS?meVEPTD&sPp8V}$3?pRPg{1R9d1Os z`I*~qA?#h*_sYbP5_ml9x7m%jw-WAaMLi?Y?#V=w#3NXu+B}=>u{JtuE76ZgL z$dO&}_z-^qSA`S~a&f;w%Ro<|l)%5oU~LVE!&%4|SpFwG12%P{oIZ{Ws1bRUh2B=6 z0`7nZSZ+xi?yp=m`tod%gIlx|+l$7RA-9#pB4+}e{;bF+M3Ouw8))@XA;}TQi`;#Q z6$8{B<)+g(P1}OPTsEJCt3dAf0tVAgEm8j-D(l>KEypdp@Tna^p=Z+|(>ZVKFd1rx zJK|c_!N#tM6#o838pS(*k1S^)6#>6fCeR5RUcwQ3!8;UGEBpPeg2HN%b`0*YToyY& zQ0bAXi55id*bjQRjJ(DsGwrx4%y?MQ86Q(h(9Rh<|nBb*sq{s zxHZH(;CB4;D%6p`!ykm=)sMVHL-K9Qh!1vn@||4K%gOj|E#s^Kn`&VU@+ZNZ6(ZRw z{sBjt;VA4IbOtsT-k5aEk=*B)aPUaW3*dST@C#@k{4RWRazDk9|HSfhlv^?fL#Mo= zMYC=aQ%&5*!KRT7KfY3=g?s&bcERUx#Mo&j@;Ugo?DtQyBL&a%PikOiRia0(TAS)N z)6xs~QK(d+(fh`1kuP5j?#Z9Sxz2&Vi{T6G`x9s?1=z`tvFa`s;lkWouTnu7!K5(&!N%gD6yU%}Ck{4GDF zBhms#i{Y^T7I+H#UP}}3f5mndsG`hWrL_KUv|xYIk$)t56!LUr&RxY5+$F-Q*D=kB z{9$UF%012c@NY%rUAsQGPGlhL7eX7{4aUr5r_D=rx{Jv$Y0qj3RyEz$;_NzRLu^X+4b{QZoad0-K*{^lh=HhO3X% zUt?oO&}Y%uoBYWyRkq@-Km%OtoM=2%ks zdiaSDAA_F^aZm1<6XI1b@C^PrmtKZVEKp{1F&H=HpY`=j_n77bUxE$AQR>2sy` z!(@UFCiBaX8zc%3`=b`*k_Ubcmk!oun|&p5cuT%7pDO#{u))0^x!T|*aM<9JhB4S^ z>@Kd7tQoY`$6EN4yzoB$(FkN%u7-!Td0#TdgG2DblUf)TN%^!#DfbYMhrc93(@B|; zUjR=;AAwDBGo1Y=EgKBG2zy zaM*zpX8(%EO71FVf1#EpYRokj&SRm96c~>)NkPxYM2_2uno0Z3ggahllCf{(yUrp4 zuV@)#bN*r(lf6dE1-l=eE3$5>mKw`1!x_u?mbQEc|5U@{Qp8OvoXf%?QgF&D>`?)) z&{Ay=Xt@6YuWO6}4RC!-^TFd86q(Oc^BhmHJwJkPgO)uMolQZ}BAAfZ+5NmFOdcYf z$NfnI+LjWMt$dAJh0iZzRB_=-%L|wDxPC-Vt%7@N`B<=zXC}Rx#@iR&?R{k%1Bd_Q z>XdDV!zoKaak416KWV_Pc%)8Yk?(OHGq(LCZD>8HtYfGhWL{bM^wm6iA=b>TBX0*0 z`X#gS+^0BT&qtU$)t?3D_rq1(*CpF3ygzaN0X6Hv9=SPrd3WBKJG8K{ps=tocUbO_ zAwwm0_hi*KJ8y7#`J#%!-z?Fq;F~34OHZi6ShP`9^tz^kqKCg4T%vt`=cz9 GzyAYRVU>pf diff --git a/zkvm/entrypoint/src/syscalls/mod.rs b/zkvm/entrypoint/src/syscalls/mod.rs index b7447ca814..ba55199479 100644 --- a/zkvm/entrypoint/src/syscalls/mod.rs +++ b/zkvm/entrypoint/src/syscalls/mod.rs @@ -112,7 +112,7 @@ pub const BLS12381_DOUBLE: u32 = 0x00_00_01_1F; pub const SECP256R1_ADD: u32 = 0x00_01_01_11; /// Executes the `SECP256R1_DOUBLE` precompile. -pub const SECP256R1_DOUBLE: u32 = 0x00_00_01_12; +pub const SECP256R1_DOUBLE: u32 = 0x00_00_01_13; /// Executes the `SECP256R1_DECOMPRESS` precompile. -pub const SECP256R1_DECOMPRESS: u32 = 0x00_00_01_13; +pub const SECP256R1_DECOMPRESS: u32 = 0x00_00_01_14; From 8d84df09c6faa537810d7d096bf3c6b071a07eea Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Tue, 14 May 2024 15:56:27 +0900 Subject: [PATCH 12/17] kms --- core/src/runtime/syscall.rs | 8 ++++---- zkvm/entrypoint/src/syscalls/mod.rs | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/runtime/syscall.rs b/core/src/runtime/syscall.rs index eb6b1b9a11..429c59770f 100644 --- a/core/src/runtime/syscall.rs +++ b/core/src/runtime/syscall.rs @@ -108,10 +108,10 @@ pub enum SyscallCode { SECP256R1_ADD = 0x00_01_01_11, /// Executes the `SECP256R1_DOUBLE` precompile. - SECP256R1_DOUBLE = 0x00_00_01_13, + SECP256R1_DOUBLE = 0x00_00_01_14, /// Executes the `SECP256R1_DECOMPRESS` precompile. - SECP256R1_DECOMPRESS = 0x00_00_01_14, + SECP256R1_DECOMPRESS = 0x00_00_01_15, } impl SyscallCode { @@ -143,8 +143,8 @@ impl SyscallCode { 0x00_00_01_1D => SyscallCode::UINT256_MUL, 0x00_00_01_1C => SyscallCode::BLS12381_DECOMPRESS, 0x00_01_01_11 => SyscallCode::SECP256R1_ADD, - 0x00_00_01_13 => SyscallCode::SECP256R1_DOUBLE, - 0x00_00_01_14 => SyscallCode::SECP256R1_DECOMPRESS, + 0x00_00_01_14 => SyscallCode::SECP256R1_DOUBLE, + 0x00_00_01_15 => SyscallCode::SECP256R1_DECOMPRESS, _ => panic!("invalid syscall number: {}", value), } } diff --git a/zkvm/entrypoint/src/syscalls/mod.rs b/zkvm/entrypoint/src/syscalls/mod.rs index ba55199479..674d3e835b 100644 --- a/zkvm/entrypoint/src/syscalls/mod.rs +++ b/zkvm/entrypoint/src/syscalls/mod.rs @@ -112,7 +112,7 @@ pub const BLS12381_DOUBLE: u32 = 0x00_00_01_1F; pub const SECP256R1_ADD: u32 = 0x00_01_01_11; /// Executes the `SECP256R1_DOUBLE` precompile. -pub const SECP256R1_DOUBLE: u32 = 0x00_00_01_13; +pub const SECP256R1_DOUBLE: u32 = 0x00_00_01_14; /// Executes the `SECP256R1_DECOMPRESS` precompile. -pub const SECP256R1_DECOMPRESS: u32 = 0x00_00_01_14; +pub const SECP256R1_DECOMPRESS: u32 = 0x00_00_01_15; From 45960e716bd445372e1eb1ecb0fb0284e44469b2 Mon Sep 17 00:00:00 2001 From: Kaylee George <62825936+kayleegeorge@users.noreply.github.com> Date: Tue, 14 May 2024 19:48:01 +0900 Subject: [PATCH 13/17] change constants --- core/src/utils/ec/weierstrass/secp256r1.rs | 2 +- .../elf/riscv32im-succinct-zkvm-elf | Bin 102904 -> 102904 bytes .../elf/riscv32im-succinct-zkvm-elf | Bin 117032 -> 117024 bytes .../elf/riscv32im-succinct-zkvm-elf | Bin 124272 -> 124272 bytes zkvm/precompiles/src/secp256k1.rs | 6 +++--- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/utils/ec/weierstrass/secp256r1.rs b/core/src/utils/ec/weierstrass/secp256r1.rs index 905552b638..176db32fd7 100644 --- a/core/src/utils/ec/weierstrass/secp256r1.rs +++ b/core/src/utils/ec/weierstrass/secp256r1.rs @@ -88,7 +88,7 @@ impl WeierstrassParameters for Secp256r1Parameters { fn a_int() -> BigUint { BigUint::from_slice(&[ - 0xFC632551, 0xF3B9CAC2, 0xA7179E84, 0xBCE6FAAD, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, + 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0xFFFFFFFF, ]) } diff --git a/tests/secp256r1-decompress/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-decompress/elf/riscv32im-succinct-zkvm-elf index 35cc5032bb5b2b6190bac5dc54011cf7c524ba4d..8ea0788ca5e2819be749d32b0494e33c3e867878 100755 GIT binary patch delta 296 zcmeydnC-`6whhw+7z3K83v8b*z_`v?#MHpjz`(%F+|(A?PEz}(n?VY;svquTWP z5Jq-9(g%RjlGt>|NBNl;O?S*@RGRLPz{o#cFqAP@7>mN`6GIu(u}UlmXB6MA6vi0O hgxh{8OTC<&vRplE249U}jK-tW0;kUHEs=~R765prM+pD` delta 296 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 diff --git a/tests/secp256r1-mul/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-mul/elf/riscv32im-succinct-zkvm-elf index 04a403206554c18e7e09005e670dd361f87929cd..93518702c0c74783e1366e386c6cbc8ae750e549 100755 GIT binary patch delta 303 zcmexxiv7bW_6=oO6b7#NtDo0^#!nj4!Nm>U}~Ot%YSRFgK* z%gHIr)x)Vk$_%H1>5X?8&8Mp@V9b@mraeB&&&)i2df);^<>}`ZFxm=ZQ8azw3P$nm jrVAP4nQ*&t`nko7?0BU4m*ABS07_%CdwbRrMm9$Pb}&ou delta 303 zcmexxiv7bW_6=o5X?8&8Mp@V9b@mraeB&&&)i2df);^<>}`ZFxm=ZQ8azw3P$nm jrVAP4nQ*&t`nko7?0BU4m*ABS07_%CdwbRrMm9$P)Wb}# diff --git a/zkvm/precompiles/src/secp256k1.rs b/zkvm/precompiles/src/secp256k1.rs index 91a32054d0..6f4961f074 100644 --- a/zkvm/precompiles/src/secp256k1.rs +++ b/zkvm/precompiles/src/secp256k1.rs @@ -25,9 +25,9 @@ pub struct Secp256k1Operations; impl CurveOperations for Secp256k1Operations { // The values are taken from https://en.bitcoin.it/wiki/Secp256k1. const GENERATOR: [u32; NUM_WORDS] = [ - 385357720, 1509065051, 768485593, 43777243, 3464956679, 1436574357, 4191992748, 2042521214, - 4212184248, 2621952143, 2793755673, 4246189128, 235997352, 1571093500, 648266853, - 1211816567, + 3633889942, 4104206661, 770388896, 1996717441, 1671708914, 4173129445, 3777774151, + 1796723186, 935285237, 3417718888, 1798397646, 734933847, 2081398294, 2397563722, + 4263149467, 1340293858, ]; fn add_assign(limbs: &mut [u32; NUM_WORDS], other: &[u32; NUM_WORDS]) { unsafe { From 3d4e42b791d03b1e711f15732c59739ab5fa7d38 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 14 May 2024 15:07:18 +0000 Subject: [PATCH 14/17] wip --- Cargo.lock | 1 + core/src/runtime/syscall.rs | 8 +- .../weierstrass/weierstrass_decompress.rs | 10 ++- core/src/utils/ec/weierstrass/secp256r1.rs | 6 +- tests/secp256k1-decompress/Cargo.lock | 80 ++++++++++++------ .../elf/riscv32im-succinct-zkvm-elf | Bin 101700 -> 102840 bytes .../elf/riscv32im-succinct-zkvm-elf | Bin 117448 -> 117388 bytes tests/secp256r1-decompress/Cargo.lock | 1 + tests/secp256r1-decompress/Cargo.toml | 2 +- .../elf/riscv32im-succinct-zkvm-elf | Bin 102904 -> 121380 bytes tests/secp256r1-decompress/src/main.rs | 3 +- .../elf/riscv32im-succinct-zkvm-elf | Bin 117032 -> 116960 bytes .../elf/riscv32im-succinct-zkvm-elf | Bin 124272 -> 124208 bytes zkvm/entrypoint/Cargo.toml | 1 + zkvm/entrypoint/src/syscalls/mod.rs | 4 +- zkvm/precompiles/src/secp256r1.rs | 1 - 16 files changed, 78 insertions(+), 39 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f4d680ad07..3d49523dbb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4684,6 +4684,7 @@ dependencies = [ "k256", "libm", "once_cell", + "p256", "p3-baby-bear", "p3-field", "rand", diff --git a/core/src/runtime/syscall.rs b/core/src/runtime/syscall.rs index eb6b1b9a11..429c59770f 100644 --- a/core/src/runtime/syscall.rs +++ b/core/src/runtime/syscall.rs @@ -108,10 +108,10 @@ pub enum SyscallCode { SECP256R1_ADD = 0x00_01_01_11, /// Executes the `SECP256R1_DOUBLE` precompile. - SECP256R1_DOUBLE = 0x00_00_01_13, + SECP256R1_DOUBLE = 0x00_00_01_14, /// Executes the `SECP256R1_DECOMPRESS` precompile. - SECP256R1_DECOMPRESS = 0x00_00_01_14, + SECP256R1_DECOMPRESS = 0x00_00_01_15, } impl SyscallCode { @@ -143,8 +143,8 @@ impl SyscallCode { 0x00_00_01_1D => SyscallCode::UINT256_MUL, 0x00_00_01_1C => SyscallCode::BLS12381_DECOMPRESS, 0x00_01_01_11 => SyscallCode::SECP256R1_ADD, - 0x00_00_01_13 => SyscallCode::SECP256R1_DOUBLE, - 0x00_00_01_14 => SyscallCode::SECP256R1_DECOMPRESS, + 0x00_00_01_14 => SyscallCode::SECP256R1_DOUBLE, + 0x00_00_01_15 => SyscallCode::SECP256R1_DECOMPRESS, _ => panic!("invalid syscall number: {}", value), } } diff --git a/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs b/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs index abccaf8e69..2fc216333f 100644 --- a/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs +++ b/core/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs @@ -394,7 +394,6 @@ mod tests { let encoded = public_key.to_encoded_point(false); let decompressed = encoded.as_bytes(); let compressed = public_key.to_sec1_bytes(); - let inputs = SP1Stdin::from(&compressed); let mut public_values = @@ -418,14 +417,19 @@ mod tests { let public_key = secret_key.public_key(); let encoded = public_key.to_encoded_point(false); let decompressed = encoded.as_bytes(); - let compressed = public_key.to_sec1_bytes(); - + println!("decompressed: {:?}", decompressed); + // let compressed = public_key.to_sec1_bytes(); + let compressed_enc = public_key.to_encoded_point(true); + let compressed = compressed_enc.to_bytes(); + println!("compressed: {:?}", compressed); let inputs = SP1Stdin::from(&compressed); let mut public_values = run_test_io(Program::from(SECP256R1_DECOMPRESS_ELF), inputs).unwrap(); + let mut result = [0; 65]; public_values.read_slice(&mut result); + // println!("decompressed: {:?}", decompressed.clone()); assert_eq!(result, decompressed); } } diff --git a/core/src/utils/ec/weierstrass/secp256r1.rs b/core/src/utils/ec/weierstrass/secp256r1.rs index 905552b638..da8d178507 100644 --- a/core/src/utils/ec/weierstrass/secp256r1.rs +++ b/core/src/utils/ec/weierstrass/secp256r1.rs @@ -86,12 +86,12 @@ impl WeierstrassParameters for Secp256r1Parameters { ]) } - fn a_int() -> BigUint { + fn a_int() -> BigUint { BigUint::from_slice(&[ - 0xFC632551, 0xF3B9CAC2, 0xA7179E84, 0xBCE6FAAD, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, + 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0xFFFFFFFF, ]) - } + } fn b_int() -> BigUint { BigUint::from_slice(&[ diff --git a/tests/secp256k1-decompress/Cargo.lock b/tests/secp256k1-decompress/Cargo.lock index b40681e144..d97ede6505 100644 --- a/tests/secp256k1-decompress/Cargo.lock +++ b/tests/secp256k1-decompress/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "arrayvec" @@ -118,6 +118,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ "const-oid", + "pem-rfc7468", "zeroize", ] @@ -170,6 +171,7 @@ dependencies = [ "ff", "generic-array", "group", + "pem-rfc7468", "pkcs8", "rand_core", "sec1", @@ -214,9 +216,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -292,9 +294,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.153" +version = "0.2.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" [[package]] name = "libm" @@ -310,9 +312,9 @@ checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "num" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3135b08af27d103b0a51f2ae0f8632117b7b185ccf931445affa8df530576a41" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ "num-bigint", "num-complex", @@ -324,20 +326,19 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-complex" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] @@ -353,9 +354,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", @@ -364,11 +365,10 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "autocfg", "num-bigint", "num-integer", "num-traits", @@ -376,9 +376,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -389,6 +389,18 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + [[package]] name = "parity-scale-codec" version = "3.6.9" @@ -413,6 +425,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -429,6 +450,15 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -560,18 +590,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.196" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.196" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", @@ -620,6 +650,7 @@ dependencies = [ "hex", "k256", "num", + "p256", "rand", "serde", "snowbridge-amcl", @@ -635,6 +666,7 @@ dependencies = [ "k256", "libm", "once_cell", + "p256", "rand", "serde", "sha2", diff --git a/tests/secp256k1-decompress/elf/riscv32im-succinct-zkvm-elf b/tests/secp256k1-decompress/elf/riscv32im-succinct-zkvm-elf index d594b8f840c921163ed8abf72b9ad9db4db5e118..429740be4c60fbe504198eaa0b877cdff8b2e572 100755 GIT binary patch literal 102840 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 delta 42701 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 t=RENkhdKaNZsL6lvC$of1#EWw8<(dvO`1CL-? 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 delta 42972 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 wurTwf*U2DqzCcQ3>n$|LcRS?f?J) diff --git a/tests/secp256r1-decompress/Cargo.lock b/tests/secp256r1-decompress/Cargo.lock index 5709875724..33befe267e 100644 --- a/tests/secp256r1-decompress/Cargo.lock +++ b/tests/secp256r1-decompress/Cargo.lock @@ -655,6 +655,7 @@ dependencies = [ "k256", "libm", "once_cell", + "p256", "rand", "serde", "sha2", diff --git a/tests/secp256r1-decompress/Cargo.toml b/tests/secp256r1-decompress/Cargo.toml index 07e589d6dc..47f1e23f82 100644 --- a/tests/secp256r1-decompress/Cargo.toml +++ b/tests/secp256r1-decompress/Cargo.toml @@ -5,4 +5,4 @@ name = "secp256r1-decompress-test" edition = "2021" [dependencies] -sp1-zkvm = { path = "../../zkvm/entrypoint" } \ No newline at end of file +sp1-zkvm = { path = "../../zkvm/entrypoint" } diff --git a/tests/secp256r1-decompress/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-decompress/elf/riscv32im-succinct-zkvm-elf index 35cc5032bb5b2b6190bac5dc54011cf7c524ba4d..5a2cf4f30903a894af6a51afb77ff5890df56b50 100755 GIT binary patch literal 121380 zcmeFadwf;Znee~%*=L`Vgb*&9a2En62}lvOTZrwndLjhScC?D&qODer0kw{{YD7D& zCLT@#c&l!%YC#AAv>mInjj@-}L<~Wvqa%<2tpzo5(YD?&fUPC(_gQ)uDfiZhk$5Pg>{}zD#L$Quv{|Y7YVzbk zp1vOPubV%eU%@?pwqYELP3Wg$<11Bc+yg2$c9da?99I5qV_!H zhOM8)3M)0twHlRO6;><$Q`*FTWoLfUVTT8(w!WFi^t<}G+Mdj7G|c=;Bbi@pn5P;B z{e@1}uis~7&}aO)*w{*y?$fp^m22^CSATW3H2_-ILd%J;3eUFkdw?}OWm{+U08>xe z)|4J#@h5ES(jH(HKeer^dw?}OZd*F3^>S5ao8z-Nm_$ubF2Ux`l=C21>!!qWt z2bfyQ{Ph5fKgj&`0IT>B^Vb8c;XdZC2bj8-`Rf4|znl5%0ame?`Rf7JP|f`H08>@W zUk|YOLgudrSjAn;Uk|W`3g+*#Fs=9MPUbK4nfcSO_zy+zeBEzY+Fi$c(r>XVvBER4 z0hUVUr_ftNt$0$~mpcMs1a!(N=J+E#}@ z)$eN?({NAs{>8>5PsKKM*_n^9Z`s(lZ0uV$bo92Z#*iCs46VqM{u`2JL9yvteM5=i zb%n`-#*l42MZbMRcKE4aj1@n}?uCkSq0zGLh9^F~R_du(;o68D&O-+(Be4laggzo} zxG(nffe8IX?99fZHsAp6>Y!QbK7y! z_5s>rr>Cx^?NdFs9WQNPqirK?-=yt_J-3~p=?y_|2zo=%8|snXytQHIrEM{7ucGbu zdTeV>eIOJYE$u65yEbGGtb%V(g`9aCG|$Wu<}b~+{acWy#&9Adg*=_1nBxJ=HS@^) zE13f|)wbd)7GWN(*CH;@nWL~jKk@#^VsC%mQ%U%rt>x58J&g=x#l}@;#qx}7bOHI| ze!>G;$Yrl!zK6*C(^r72;Tq($H@>hpzOXlP+8Y_o(Z107FzB}-Ef-mgEt)L(UX-y$ z8DrGvTb;58Mhtg(mEkZhrwp0Ub5~5;GiiGs^_-IS}@jU z>&5q1mHbk!c6G_GTDpR?suy0#@Jv=1OKF^K}ay2bq(DX-2{>_d+Z;F0X(CNok?|gm? zX8vqYjo>hE^skd|lW_%O>xdQhQ*O0|tgiLr9;@u%^mwAF=deYF8^IQ)qJhn97zV9k zvjbBAKcWps9=;b3!5e<3saLtjuJVMzP6Q`Y@TmLZA*on zNI`MpmKQ_PPM$kf0ruE3wJrAf^@bN-tZq~dy%IT@VJG}z+*{nFbo;E-WH+2;Iw^Ra zxg;&mzcUM#gpvg>hiofX*^_dWmuh0HkB4G~zd)8mAN@HA>|&A2eAwmTPu*KSHtm^L zD`#P?N@PVeO>P8QH&%s`8@Gh)RF!fvnw3*@P&w5HRBV03jBVH-3g+Gk#xT{jm~V+6 zefoFE^H_M<1t*(xa~!-5{6`>DTkA#kt4dxG+4to(zEb4Y4XHkwx2cexOE=V4-^;w1 zQ`^ntR14d*&rD9sRWa41YWlQ(h>{YXM#Wyb1V36*GY605^c=2)qt>3GiCr zr79Kz-WzxbcyEC(16~F^1-x9vOyJqTP2kxAF9)6iUIu&_;|1Oeco=vuftLcW1zrNY zPQ@(XS->seSpuI3ya{*#@D^+&@J!$l;F$u?1-=is1-xCwqQEnNM}cPuydC>&;Uo5i z7{3wA03HRN0X!=37T^WIn}AO=Vwu1rz%zkI1YQTc1b8j*QX`fH+yb5j+!FXQ;AOy5 zz{`zTFW_O|y?}=WUJg73ybSmx@`$;343>frkV>5qJ~u z0^lu1EC;v&JO{WT@Lb^gfLp-ZjaVPx3V0vjsy*a}zR^!)BU#dJn#cidO;gK39dgiw z9Kh2)`$EZ*7T^WIn}AOQH}D+b2Jjq#*8wj9UJJYw+JN^49s=H5;LCuQ0Z#!hXKcW; zft$dy1zrw31-uOSGI#^L7w|CfUIH%#UJJYgc%6z_z_Wl`z_SEC5qJ~u0^mH00M7&- z;d7?IbAj&zZUJv+Zh>b2j{?sSxbVs%Uf73U&qWS^M}cPmj|#j6cmePx;1iJp;1S@N zz#{^$16~5W7I-Og0Nete1>6$>>#vQ^3oS1K?rcy?}=WUJg73ybSm<{4}@ZQqs-WZGmY5zVk0*0Vse73jO62%k+>@>$6bg| z4nyPPCCZy~nVGolGDG54iJNXzD${P+Z6rom+4ibaRpNroY`a%n!xAb}+iSBVH}29_ zY`hw1|R!^8vNio})p{^Ybl%A6im?uu&V9f%s{^f4+qy-3;7Y0A!e zxx*fuVYn+78P35B!<&Cp#U4G356&e%nX1}udim2>9=Y-8vy52&)8fxV#9N_cesPF+ zD@0ykVB3x4xMIWng04lFGB1IRZ}Dw>(@xj=krBi;Ultp`;!zzZ?(T|nQqN0UVxkxH zJJnXR9}|6;_Rs$zZG}Isj9I^5;lD4wx1c2MR<(B|1`@MqA6s&vcWaBX>j&Z&TjF-~ zNQYNmubfn^auA5yRTV{e!sc#{PsDsc~UUjW`^1$v%>_VWXo{t!9JL5^~e zqa5U@4|3ESIqHoZ^+t|*#|ppK8+dP_-Q19x9DBk#FZNUGyhMNex%gEp^*hbSD(h|S zUv*p=AFaoQ+_@=Yij=P(#OBdJhGv@u%xOU}xm;z)Jijtx&nzc4UZ$J_Ta-I!nX(6e zNjV3jOYm>s-Ru^-G+a#TNWEN=Gtt#CDVxM>tbxt+U!{9%-(h>FauaA zFntB4fGNpowOs&TUv#p>5e(Pt9Ro!GBhmn`5}Yf2Rf%(6akZrz~V)|BDQYgOLi zT5>4zsWHXyBV~B|T9mi1N!c^2m2Nk)+HZF&{GwfQOyzO8mfMQn9^RmA;qm_c$~m%8 z;L04^C^~I82M#F7XYE;wl(PUFv(V-FN0hfCd4gjX&#(v1 z(M`y_pdk|6xXKf{_`^>(`6?lw7bf%VmyZLWwfJkW$HUP0Ac+QQs(`j*>EveQGI9Mq){q zZm#&Cql0?vX~d<(>RP zsRQsgox8s7+c@}KSgc}sPcbKrojDkG>7cxWo&UXlx4PsHzMZFbrEPlrMtPsSBuDIl z7eVf$XQ-O{pE;KJ_Wqn2o=Geh2TZI`xHgdh3KHZUTR+`_UJR@H`FpF)E`UCJ)99+_YAoXf8*+pfeXLQ z^Ld9Ou?;-i#NXrm{gl7a^~YlQ{1wvf$W-MXKnEj-<8}t}IF@&=kC)OLNdUO#XTPgL$R1C?Eb-$K_Dk3@3ZYVx}bWOk87tpK|i8B7d> zosAr3Ohw9@_@r{qZa@bu!>t~~d_|SLD5Ba{W_;?lPg04ytZX-`LWvs=k9Of@qN=^W z8_nZ+`%pL9S0x^7ADtW%Rj~^EeoM8gserCsQNvA5QnAVi{j_$t5o~@`8Rn*`9b)TU zu@~#AI=llCFSKi$W3NQ#H*M+AF~qudaNLERpxwp@J|kqr)?0?y9Csylk60tN0eVwB zi$pr$fzdX%`A>HBqz>YrA-ZN!jSfP8+k@7}$e@w9{u%0gA7CG&*uH5hIkp;`)lC0~ z;c*1~1Hm~HzC&vo=etdxy5&_WaUc9Ei1O|<+RL0U)~YJnRx7uBs_G$Pb zJ31y9qs)!puI)bSQ)we`iH*|jPu5?O{>+S7y1%3~U&Zb^tZMFx7|G}Y6-z$DyZFqE z6{;o)jnR!Nwh($30=Mc_EG5sHf$vl`DQSB^#n9mzL@xcjpbKj ziylx#`J<@SEu3tp!qk)chQ(e7aqLfH6T;_-kBE(5e_qkP%diMXZI@&WJtE=hB>uZL57u?5BJ#w^(~>S`>SN&-;=iZL98~ z*rV%1MJ;b!Zd=P+H9ifv$RV|_TZ;tlba>JD4z@O|eDvFS2@;y0)@9kwG+cGdc7 zq=uLLE#vykx~Z&hNS@^5Y1rfP*|sJs`}U@eB1=_3Q%B;u0!w24<8mUu-zTL`DRs%< z{ols&$YVz5lgljq+}fnjiLd%&;H!=VzUt3nhwKPz7}{4=gmpZPtm=3{=LlygKbD{T zD;Y0i+Dj~-$6VzxS9!#cqlo2463dSymLEwhKayB}B=C{IN5=Bjj*Lxs>J;;I@`DK_ z#84^hT$4&punco-iIE(Wg7&qvVdB9PEqcMb7&7;d`_Lq z`d-O6YR)-DWy60$`#(~L&MB&k?gIZ~;OBX=Kkc6cKkd)Vx2=7bgP+gYrOeUm;Lk29 zd+sLi>;!*yQQaQqYoFlHF0x)np31KSKlT5I8)-90uLYDp{5Cir0e^N;$#d`9R@rUf z&n~KM?8E2R!O!Px`f3^u{;Z;j@0`ZCwtzpYD0RyP$nFK;&nl{W@|(2zG5E8JmVI(7 z&+i3)R#E9WE0OhF@Mje@ow>=jTIPX2tEj+yl5zb2{NS1MJhXiZ{*0pBH?}aA=fR&* zv}|Jw&j)}%qp0j<@{in!;Lj+Uc&L*WP2kTcDi}5aoHqC~ipt0TBlPSA zKW)yQ0nXRJA1Nx&Dr4*u!5=Bgy$(9-egghTQOgUJ@ajSEM~Wui#9Wka1wXa^=hxBi z67WZg%7#LJ-PPca6fOJO3*;U3;ExoQUf&G1!_d!$lKw zJ_hG(@P~_PucKCNMZq5~YFf`4OIbhghl|RKMnHc9`1w4YaW&lne%d^F7VrK$_*uUj zj{HpgckqXb>ULcSpVxyQyYL8hp?y90Lq+8iuAvP!i_fY1Z(&>$z#l3qtG$gjlfcjO ztqY;868xbetN9-K%>zIA)bl?AX9xJPLEl)V%WT5+s;kDKhuyr(|>=e;ry|dKG*i^dVg8B_fv-R4(}I^8r1cEYq$5e7|!o` zfBaRsUGL|Hy7eFO-sk=N4|BWTpBd`bf5>}B-apgsdVg8B_fsKH=pTLYkgoSzyS=|9 zm6VT(evMruRqQANy1{`e&Nm`Zt|@^gnv-@UHil>G!=q$a@bA@%flCyY+7d zyw`a2`{ULQmG`AzS>K6`Z5(R1+`v3PLGD^h-29xfmtSFcW#kkkb=B`N0-^W$D7x_E43s>ol$kNZcaFxGjI9oOw z&aL|m?=aV?t;(@B@P{m9kQdCnM!5qwX*%7R&r&Ox?XP#!&YiiE_3ztsy+Gbe78al4 zZD}>UTX#u)g3tTOiRP0x?UehzUKRIMTX?SkJo_{rdlvFNXrfDt#&K4uGoj}HB&Qz))hXj&QxgK z39T!9TIJrEM!O@>x`6AnBZ^#+Klqv4Vz@IC&`=YM*<;KzI>)SO{`wJkB(xtO|8Whs z|IO4_KZ3Ty0qw;1H@vI7<_yDIaEL21aMvq_SN#$1HTLnU;aBxecw4C4{>zV}|JrM@y#d55^ZaFg!|4*QttMD zRrZ=o3@>pf{VvdSCNC_4XV|&PV+?!mgND8ICgt4tw&6ANu1jsEZM)(8(+`z5**3gG z;NEN_Ps~@wZSsB}C*z>1(Z*cETeg;}^ zRnDDUH@9hAPR3E?B{wR&CBfX(AoClkNqOLzL5->d{b~34dcgu>wc3eVM7UkVG*l;?yZsi>-mp^oOQ9Zhi9Ix0!9gojDk>fSU zF?5S=Yg(t&Q|o_VfKT^E=tk$3-sbbVDNQ$WJ^#*O}WOO>I2?aEo)Oug}1 zWcV@cLNoIEb8yaq?nCI^VV~bqj==BAfbIi^J!2KPZ`Zh;sq=I#(K}F$o_7ep2Y4Z9 zZAMoYe8P1B{MK@vyLQv8Su>XYl`qn^Z247>MkGJ`tx~XLiYCM$RIK& zJV6em7U{k95xP4^_}$+#q4m5W^hduh^hYOW2%a48uDA3U+)E1K&3@g7J)>3Yqtlk4 z?OgahPwQj)-q{TAZ=R?1(V2WRdI;@zf25p6QNx{uob*Rdgzig_6B{{UyfVi^t2u2! zC^q5EfyvS6}}*2fx3qv+4gk)M9_4`R#G*cfX54sscS}&6q)rVr^J`D77W60gMlDWLipUaZcKu(UpZ{$1w&7n@_7{i;kE0FJ< z$oD7EZD=`hQlk4Y`ao9o{BCD{olZWv+Y;ce@#z-bIPc%7AtN(4a}~O)d3N_kd}W6Fv@3LU(fOLDSw2zgNNU#I@RA z$oh?U5W2@2!@Rlhq-vXTHYW_{(0A|`$Y#|%k@0Miaf#g|Hqo|l9(su_w1-T>_ke55 zJZ%f@Asc+$+&h~$YFp@h!gX>?OJ_fk9&OoYJ7ii@7#U8;Z|hhhaRvU?16LS9r(5Y-uxa}s?2tx=$0jT zkeAi_H6D8pzH=$^^4^O+4SVJp?o#9>xOXl*tej(84DS}M7p?{ubVcj&pS8ql$ayYy zMRKcBS6hG58;EL2|qlxv6s-KZR<{K>uPACy}bvTmIgF6BR_kfX=y+c_s)g;;E~Y8RcNYi zHoPU+*34FX7AAh+awBjo_jjWWd-y@+T>mTV_HyhN@l$g(G~Z{~JI;kqRm$G+ z6`pgw^vn31YOZGsTsh(8hLiO!c5Ev47k$P5K=W`fN_-GKrrdjS;L`~B0>7CncgH!< zxJT0{JaKnCfxf(!>-^(t<=nfGc+l5R&0o>a0ivJGx$qbLl&i$N?yOUgN&1j^xZf8L-3O>6Aj=X<95?_E zeu+*X%g`oyxjXA&#)m8i_g<2Cvl*S&al!&*nVe~CaX=HeutPdWJf0f&?G|mb zBu5oHl)m>i|3c@e-p5=wyVxQ0KYHY(IjXx9ofjI2yF}+*^3n9Y*XyJ@AJDYXw?hLC zV29S@Bd|k5unX|XDOtunc4!E8D7g1toQZC&fKOcElVdHTh9WwT?T{D%o%i!k__WmL zlW&LM(^8*La_?nMI+@OAb=skpvAll}Tu(DsyO=wCk<48aH0>ZKUPVqE+Gs|Gu)V zKFaySy|k+w-rY0#FKV8H9N zeLHCTQ}`pkx^kHJBJWi1G@N@@Ag|Yv6FshTB6r&_s9Rh{o^>Vsm_=Uw5In>#2lq~| zYtj8o^0!gLycdwCk1m5h%xma!(fus%t`K;MW47Tl*5EUQ=DqlgRrriF&3o|~tMD1Y zz4Iz|xP!KzaJ}eU@@{Cmi@fsgoy3{G?rXb*?%N}g>G>UjEyItEgofbWGs~g*`zPvt zAk*M#9gXgTd;fNHe;f3D(XWGTxt065jB}l?PkG#Xn{#!o%jw`seafri8TQCaiVaC< zf3NLP_xhCBBk}iZ#NSh|;@-RahxmJF*8YALywUzXpvkvK_8N(cklnql@QJtxzBtnk zP#?k`ts*W8?wwcv6+Z2UPh8=X6UAnTJ-U04VF$YJ=jQNfjn60F9>J$IKA+^?%lhUC zy8kEf_nE%#Z`Ah49trNUpCNDX4SS?%DA|X+%}4$=`ZRIxygHMb(gA4VDl}OY2q{R7^{p{ahhi|-ySfFvRJ@g@b zzA@ar><)DNGQ+(Lzdjt@l^DOkAcjZZ2OmV9Gss(33QnG(?jXGy_cj50Z zBKElN0P(|6^3FdYb4Qgu`^)g8>Z?!EK&W5Y^` z?YUydoQ&E0!Hc_)`_{SW`MMw``d9E=f{i@n+n${dQX9wa$-Ve@Vktka{|Neuw4Nu& z8t`e5*jelt{?x{w?#K4b*ae^PrwRBhwr9pQ@M#ma$G`VBH$e|E?k8L~$GU8f#6mlL zAMe{9_#}BgH0W4}xZZWqbD=2{T@?G%JomV`p8Pb!r%7-f9}C&o9-%?$dyN82M=%`TiQieLau-_6?o4yRVNmY{}WLr;n0Ssm+myUq% z`0ujE@a5-V*Y;>%4voXS`$y7`;Cn)O7Zl)MuQcq^k~4DmD-}S`Eo^_k$MKYV19@FBb6DBX~UaC=-(LT3_H%8*>jLrvH8rG9}@*O zKe%^Z5*;3c&F4yd<5lyydOkAe5ra}Ya38}SK+|??%c?m(U9u*zow-_td`X=sbOrXN z44Q7H#&j(--Hgwl3r)ot-d+9qjJ~x%lM786*G_OjQ&6w6x6cRH#?JbcGZ~w5h%t(7 zks6a;-$1X4N9=>SjAfFot7(4QKphb)56 zTYQee{*qyOjk+0qKGFuxS**>!Bl;Y5qJyx_;Akxb$A0i_ra%0$#FfaGtk>DH7AtXO zaPMH-okR1`9j@@)iSSw0yL%sjxBrA)|Cb>5{x@pA-_kb6&%K#v`-j8|_?u8Ebcnw} zj~D!f>jG@TN21TsPJc5Cf5UpVbKos-YtI7QZYs5UaTOWn28R+~55JKYp18jYq^UFTe--iQ8v%W%^Z#iYx>Ga8umSz$o>%OAfLd$tEppr2|d{D*H(zZoyjiG9#h^wy3}@`#nun@ z^;r9jvw3fqe$T6F)qXV1-rg*Is8uO^&`!1){nFviyUl;fG^Nv?wxxd zW54E^!{oWM6+J%6GvZSxqc?V|GLQx4ko6($1LtjrcH}ed1GS%+5B(c``Q+Z2{9fP# zxr%&NVb`m`&l(@GICHVcuu@_CS2#jOFm~Rv*t@=&|;JH?z(pIMHX{FGqa8 zEdI36w=J44tzEW7aCNsW8c#ER3p}5272A?=jgGNpP2FZ+iuTLePImLl+D4w>mwDz) zhQ{Ola>Vz6ZP=-?jOidYQ+xn?8+tZ!JT9>P*B}?jS#a;XbQm2b|M(Nv^NCNQWB5aF zENu7oGR9M@d1LRcBTg;#@j$!1dl~XruJL$Da#b16OE367{`{Ay4a6kAwY;RQeY87+ zxs#ZRm|DkFL$NK;Ab!`LGas6myWrkAAK8+a>ib-wNpLxf6X*u@%W>qp)W%)=Asy?x zGwx)3YYeZAXN#3`fAd{@@{jl)-Q}|0g-^aixew#RfBzlBy&T_5J>1U8Qr>rdh+jUP z{E&M2!A-=LzT?zWW_wH?iGYZRotf@Xr4S!@i7Mn0lFg*}3Gz(+&GK z#MYZ9bLII<=VRv?Qrl`L$9_;zyd0nqTVt}VE`&w{oceqAi-()L_z61x14Ezv~U^8iZ&^Fu|U!`XBJHO5&vG`VO-i&`?T(@D% z2a!uBSUawP&qvue;lcA6?3;iW)D7I(E_kr9+&fkOA-Vl9dG2j3Wls=owxYkR$)dlO zzczaqTYf6|-U;yS1|N2-6W_Jq!`=k<-t?&9-8RJVZsrO-zTa#HXDcz@Jn(EFe?+!t zKLehbKAtTDp=&vKZuRkmzC~?r?GTUW-gFPTxNd!x{TuyR_b9gXevU=pkagz=4}fnQ zIq^>N$fB;jW!sQVS$BSG2KIXloI;8QVu(h41)IFXLI_pndrC`P33N1~rL#Xqx5M5_C;s1vD+t zwFJk+Z}QBU{wj5eDA%pvp_VYZF)Vce&w3VLPTu|?c170`c44p1_G1=owY%*a{KF>FIUS#i4x{h(Z__#Q4SXJr&b);_Uq{?SUNU_) zIcy7hJlSxs_zGifVV(F~=3y6C>RiCwJzqp$w!{B+Z1Z3p$4Pz7OV+R#WElDPpUHP6 zpZy1N)ZglSHhFp_@IxB6yXPmw^}UD_zBfehIrr31Yib9rD}m zaiD9vZtJD$h!ttOr$)E+@MUi4waOjw81={J!25IMj-11q`d;|M*soYcKh#`g%{=mJ z%^&YVbmETP22D#K1>3!k3>R}5U(6pd>;xSVdd65yiW0JrzbF6G?;Upu&x z@AF-A{+iI`!`K9Lc?7zA;21Q4cjQbTPxDS_S`MCDeVXp4FP?c9qIY++3Qfw(*$Yj@ zVUPU}$wJgL~&9?3UEo@8o(>2XzZ#%=?(5 zB|EVP*HPF zpRCvI+yi~*5XflQKRd6_ccB01vS;w4D?tvcfhrU_$ z*qK?{j%u1_p~r(4P%}BI*Hv`=t@&m42OR-Vv))UFFE+Iet&;ao=Y9C1?fPDLelE6U zWMJ2Cgy%oQw)pqn*5`a1)xmY^QTRNFnh`WDW)BQ;synkBx|RiWQQsa+eOvJEBEEJX z(fe+ary0ZT?bO6pQLk!42Imyu3-@V%W>d?yhrNxSehr-+PhR;4a!Ju&V(y3ksKjqe zEUnk5wr(YEO0W(*5x#HXdX|ijeDf>Nww3Ewi9X^(*JYIynH zOMd(h?e-qNb2s|K;d&g4=JD>e?8SJD7>xF!vqOl{XfJSEban{!8M%+VsK@SHh<(3< z`wOq&*%tYJgDE~!@>qNO>Fiy2-^aCwd0$2RkjAx#d0$12AKW_^Vh4`BYIwJEz3?2p z$A*12>}Nwq*>_?OB)=;ocAiPShJ7c_yjQRpP24{W5B{0`4BWHkDbJj#@9-V|f9JZN z{b?`De)@nW!4>2EHgG-1_^=~G98HtI#{)Yuq{inDdp?|3p#6@`)Y`a0lfTEKi8Y*7 z!$xQA)znbv*WU9B<*vRAJg=~y0Xf<85H|Ar;Nd=sO!3UQ@C%IZWv&x=)(oEv(}^+{ z)Ku(XkB2k=J%5kKYV3%-t7{u&;KGgs_s)ffz|(}CZFN0*d6hne&4-f z4{Lvn{|4q}+D_~w`Z5wb65M;QU_b7F7O^8@yQ4d)^FULd!;G_dsNH%ibS)3)x&@oG zRIj;-KeDeZ*Lkq3Ead+kS(6$j>(cI!H9;<1h+l>NRK(Zc-{hmG=a30a|kb4QbY47xLN_=z4Mq-88$VY_O414?_ z`I3%P9N=0k?Z{usW0U^u(MvmH7M#yoRcZxyjppwy@IucF{)YU_&++Cw&pgxLJE!XW z)Sg4kIs}@6d*`J!)Vfax-zvt0!kk(hlB?v__V&@x0nWs=)GfAQTfW$ZXZKue%eroO zpy`v*)HoLt6DIlF&N*vh3#da3Tu)5F=b2AK*QL~Is7W;8%V#bnFTaKF%f2@M+kTeT?TyY{~$Ky@nr4{fl)8Y{~#)li=RFa|ZR7ZR{hV z&hZJ?&OI9~_2%9ny%>Dw{z)gXu8AS`yu;wrZ9K6tOnoP#AYkm z+tH}6TDGW_yG!>G{QO5he!jfGaEFmIM6E8r`|3sTW|6M2Ey~h#1sRlQB8tptv=7TuEbxU+grBc zOR>AHHtW2Hl)wMip~kdbzax8z-Cg(ruKstI(9@OZ>He+68R)5to=P67+ihfz@jz@Z z@3`pb{>`l4O#&BvwxN?#Z{?moxk|3?ZodJYWPTHOk~=>KKd&HWWFB?iyqfp!AZFxV zVhWx)7u`pE_8!;!_50XIKj%*_AjTMrT|TJeJNruP$$+zc{g$=#E6I-r5MzjbOKkUQ z8G8i|8qUXD16*G90&2Q5Wd8*;tqW+P7PRydACIPqT2T5sNkY%7=u!uIcM-n2YCrb6 zSYO3Py4%Nq=RkmmSafMoH$3yfgH3}T=ay%Ku|3P!piSsWqCZLWGC2?3OE9h)ba5|x zAUwu3!^g8_KjU&4*UkR8xcBb=3x6Ytl}17vIm(^Fv%SP(TlqUE^$!1Y)h^~PhR>#- zYewLsw?nJLeqY9+W4Q#eF>@Z=JFi6Xvzr+!*9+eZ@Szte^u4tVJhjk=E!Cu= z#E5&Afv4QZ!@bG(U7gfVscG)>_vcTYp`61_$iqzTTiCN9-zRAFVVpx}w~poec+AuO zE%d{jt~i^1cGA9;d**ZnIj`Kar$vAFZp$IgA%dc$Tui}kY=PwF!i zHn>&;G=Q6PcTR@Sr!84?va=KHh{{NxGnY8l#JOGz8PgP%c&Jw6TXBY*!B%mP|2&Lb z)N!uNGTJNzp34~5%ehy*?UtwEwV@LIt&rVvwX(~sY|i#oc01>YT2@94pWSdCZ5yI? zOV~&Zm3A*myByta*%a(+t&wh}I6>{F7Sx_SV7Q1pr>|&9JrY>4i0ZvUzL*?hug4~L{=rdAe?mOwp z)92>h>C>~OM|xs%PA&47d@QAswI$e+iN*R{U-nP9Vdy&863{gf9%Uh8oT;Z}E`FQ0 z_*C@kEF-oqpZSQZSjGC!@Ji@Iua2it#wU0*jSaUXeV%>7IR5Inh@638*h1HmNS5%< zhIeizHSdQfv5tN#bWBA@EdRSCRfjt`AAs|XBFD^ei{bhC@VtccbthUj^QOmBm8K(p zy|h6#LuNsyv}3%znA@!Mc&~M`E;HPP3z3WSjl?~-n1V0)_!MRSL}aL>xb2qGzjWc{ zJ%4=jG+tyv=#=vjHLsNB)#sj(hz%0HncALkHcMbvPI~sqU!BMOJO z{e?5Uu93X5Xy>{{JKDThfA1VWR)6>@#raK#C9bZo8u1@))xcj-uVn8}9e+)n0f$`i zn-ti!NYD@Wo&6wVOiW=heydRxEqK_nqw{~Q`>CHXmVW&2$4ftvVG*}#%Szo(Yt}E_ zs+ngU*UwPtM{E*yyVjyVWfbW%W$Jj|ApVW-P(G#4^2FwyGVu zKN1}PX9;rJ-oY6&oKLzo%$eb4jPpIX^4&JFNW69a@J}rkH2vbgcJ9Lvyx2Rk*444yT+mA%|K6Vhh9iT+cKOvGET; zbDEBZ>4_|Bu<$9Cw~Te#r-a^+3E%ZtAFbt#Zuwkk`8-xv+u^<NlT?5~*H1zMW z*pU=?i^HyUW^jIB#c(^U{I={tkv@d3SRQmOp^t)M%bl3Z_u5h_@gpmI9DJo7ThM32 zH<=U0T50+;G|cV(Zrei6xyoyd5-&uP`NdJ}Lx$*Dpg*T2k)y;T_|rV>3pCh)Jhc7B z+9PKW$)Dd=#YA>`;BTL{zF|3A>i2%zcwXB8>s^_r8s-WA_Kq(z))m6Tm_9!y55ASm zLRKQN(MBYeZ|L*p?MVB#v^+XQpfhD=R^HK=rL=<0soPKVW5=vy3;D27?nb;5FNLAO@wK%IUt1cq4pXggBzl{)biA%+9 zNsNO0_A-A0y^m)?H@*#j?#Gm03u4N<^|KX^N(|J%dqGTzzxJP1bad~tZE)RD>`6v_ z!6;>JNyRnK7uLr4?W2eS`r;~H$;YVO|kdaS)nxgKSj*fxpPMV1o-tZ>n(@T6o2 zJc+}{c<_G1JDk;glIQV*i5x2* z;wQ;(y4hyV8I<3G3hcf0**TB@=jZdf;@2nVwfgt}Jzh7s$Md>j;QyT0>iLuNy5isd z@9;X_{#jmE{QUEI-B5ROUdNyQU*UCMu|evG$Mc#qaR0}09p7|vUN>y`e7m5qpK;{3 z(>~Sy75=U5fq#$wFY@o&6ZrRsZv4|VlVkxg(t}puE3ISVOYEv9{2Rajq5XY)w!Fjd zs9<~K++b`_ej|L~Y+&st;`;=CqMi0*hq(4eQwNFGW&n^Sc+7{4NM*loHbk zPm5Y~`+G!o{r0ILJjbWzi9Bmr6nPfe)PAfGnIjK#!^Di)4+Qy}bt(8b%hd>Ewc>EH zq|!u|G7|SupX0Nc-)M@Q5i4Z`u~LT6D}TunX{xzNA^H226=U=xu(fY0ViEe5hhB*&c%dqC5#MxgQrLH;eNUvDtd08X z=w4S#Ifcg6c93mQ$43x8hJ@-z?aAf^p+&SfIIViP1*_hq$dEAd}Cf01)wfg`ID z|K&^kM;$=Rug`z(8S7KXW~CAQ=0c{nDJ6yx$i#i=zC}JeYepxWSscq7WhBXQ#D0kW zC+61C7cu{Rwa3{A;#H}Y{q1#g-}Zd5yIgg*Ica=@T>bkTXMp>pwMnVjB-dk0GO;OP zu_?@zA16$V6+Yne5MH^Nj4|U(UE3k|JVW@SYoOZZs$cS(EFlx#B!*9nYQ8Gp#v(tC z_z(0aD)1!vQB0j>B=$dsOu~oZbz$={{LXspFm+3@$9_)NZJmH;EBx`sI>#$?>SyuM z(rW zXj5{hv6;*8;!MP7Yghts^KmW0lA@jAXfDf&%4DRIw4(FJlsU%wOY1vav89km{Q zTL+rpO+?^{H-4U>HUKGOFI^{1>@m^{4zU!OO{5L||42YwCEvL^U+2x0 ze3hCe^F}U8ZFW#h&NiQXJ#-!yJH`Ir+P}9t?E$<;4m)G66YSp`(Di55GpVOlhB<#c z3|&@i0(w0jy&iY585?^Qb>Q!z=auOB1L6z#O{=GL{Ft~WGB_Py)%Q|)?%jXxa8rjn zy!LWKep|_2F^T;aQ;osvZ)+8hzq~QAU$Rhq&J?|7=T%LD*R9%i3qRV1 zX1)i1_>IOiJ=g-Do_`DI`9SRrk4#Ub-FBa}R?QR00|>OoT zY`WN)ARpoUa7XMxj2y++p%iC_7YA{F#VwuhN6;Z`VGxJwxVE#uR3zPBG_XOPIT1BG zaF5dKh?3jb;+xf|z&DG(Ahy@`xuQ7m%gANH34S>>xtm|6_E!v!d?PXMzvGwH9jeclFs867p4CmjbcPn|heefh(dn=1QttgueiTdX;ynpR34Szk9}ET2yi zA70AsRc>_zo9XAfKL1OmU_X+ON;=aUTBK{sS$y6$}4=vHw8Znu@zVZ_OXQ z3;B8{x*hBl&^%HV|5x`P=-8p*_RpgQJ0WrRXX#OT&KGpsfAGKK*DCaWnDS12vU>1q zNr~%|H$nSxbeS7cI*!+CrVEL6Ymt5IldqE%R;-HHj#yi4XH2a>&S!$luT%8!`y?@m z-A7;S@3-Lh9L>j5*zODTehZiUL1MDR$1R~mD2rNsLKJ2bFfB)I`=LC3YNII8ij3&!)P9?x<1MdlYj zfS)Vwn&%UECh?pdsp@c-PYUdH$sLLNBG|+&@|<}i&HY7_SGBV+d$e7sT z&Uk&VjuTR65hn!wM=qcy$Qu3)yOoo zX7e5Cc-!jmVPXN($@&F0ot)udK_4AEWL<##6%@<aew{qiumfIk=Vp6`Q8 z?$G=W3!TLGdfqB_#MIItmM@th{t*B4S96)bM^ASFX`) z>k<>_SV8Km6N3E1YML4w$9<5GkXwJftCrdDVdwji)HkG-;^S3SJ^CVK>m)G&b+&X& z5O4ULm|*7rm6$-=u!ganHY^1{^s|aF|CN~FMB8RBL>AE(u`^oUI`u|98(X)KXUsYF zf;sHW1G?!?r~VP&6K9Sx^cuM6;(g@OFNY(t7t5@js%vM-+A5XccfZV9^b@&uv75md zhOw`Mx>-K!ycNU^V$YU}T`&_%!aC=Z-)HjUR_05OJ3g>2!}`=kH-*1``v(24E3qT> zitaS0a~I!7^4q)vGCw8P{mlL{(Q9bT5Z!0L3wzwTKgw^8$ZtUYiEGox9d1jzA+3V^i4DI`7QkO> zEwcB-uOHAa`#{-q6!PTQoyEX2qw7r}aqb?{i5@Y>b<2bIC@*#3V ze2>fr_0scCHqYpxspYo>otEEdoW3!_xJ4(kM8_pYF$=^OW7nwPB^HGvx^AY|pj2G= zVP~qiuV)Q=;bSEBD6&pWAaRcT?pthAz7czz&-d_0?Mv!lf|s}geo})RQ5Wtmqv)U1 zt+br_yeXOG^QP%)y@nUpvEd_nJQ9;w^snbpo!gCHHwb?Jed{L454G)=yf9sRlKn=S zr=n+-_|tT*5r0tdi2l2luiNM_v0O^@UF+~5KmOYm$ z>UiS8XpXxWyC%LJ{ZH31J8O}{*~?LQ0l&d6>pdSLW32Hk6B)5Ck#YEAO5G&1>oJM{ zLIxyfVn3Cxsms0}@mFq2>bdy+oE~b9BUmS;o)oj#H`#;lWiG-p&Y%vzS>y$KcsRI! zp{=j=so)SH^;>vD)~LdKXsSmvpa9&XSOMaIL0))-lZ+lH0`3l>WQkF?x8%`eD~QO8=gCeeSRR zg3r4~*9h9#|C%Z}tZM`<>lzu$VqGIhu@^R#`>S+~fU)F)!Sb^AU*d)M~?BI)k~Si$!J;9ckU0oa4ueQ$re|DOInKt%5w z=KBD3Cww1Z-wEFb=)&QDA0X&Ex)vJa*v5t0Hp==vaS8Rg4?5&`FYVNez8?BDX4YyN z(>3kurLFiEX_q`-^ptg}g^y9QXANbX!Fm<`B!7ymRfYAM!F{#VmMTR8MfAc3(l=&F=^nSgd?qAS-zg{{UGK%B@?J33<;dvFR%yd`R^%PV+U=e0 zIAYN*95osTHQIda!D9=9nsos+>r`0w`8etCtwhqXwYt&?vln%}$S3u?9%_Z@*jlff ze4zJWd{gjCz1FV@Zn^WgnqW+7f}1}mii~3ZrdECyX1*WP67TpdZ1Nw|_A{1Wi7)hX zhyN#Qy5H6Iv9wbU@EIZ#CjBP!i&^J0w0sP@S!zF4H zChXT3dzG$j%bo+h_eN~n2!7i;BDE3=+305Dh^HjC6(1X{*^M~Cz5(yFZ`6Sd_Wl1& z_N_B#k$8|gl3|XcZjFt^zDeC$$A^EDebe*WP}DiEDdb&0tC(~W`&JRyx6jo3WzJ$j z4NmH9HnnYug=C&x{-oCC%J+fvTs1WD8{!>_4E9s&HWL-++~F6f$N4$wixT%qP3QRc z;xADD2`63*^SiF2*n^WBm$*uFE};2Tm-n)1DbztAn;5yB>g+)R0g_>UM+ z=Z?PojFNm%@?ZIVV&oJV>{<&rS*I1TmLB5aX^W{5nbaja`IYM}xq#nZ zpJPZ|B6Y|hui0dla4#|zsmmaa>mztg!JC~${XlR%4j?82$)pZczht_AcI!$+5M%{bK670#;QAToV zKcmKEpPl)lstNI(e%7>MiVhm9^Nl&PabBtFe2mAo5HObFS!$pF6}iN?t|Yqinw0lD3;- zGe19n=6A8RJSqKq-}T_d*PeUadbq9E!`BA(_qf`VO-%wCf_+5|7i#@nh)ylBy5+XQ z|Fq7ZolkZdM&tI#$MEK_0)42cJ-$4$c`4UMzAnTbfzil4q zem}jwsq>roU%K;=ezYC)`Ds1+ne|ecGmG!G6t4BxOSz{8`e+xvinYNUerEmNw@+3a z-;l$eJ<%)ba^3cOvG>sLx2eX@si-FewO8=--3Rd<@RT|Rc`kba*sB)Y^EuU)fl$+#KIiTm6%Uz=(_J8pyh4qf9G z{;&_0-`8f0etx<{_+3;uiaf5WSp2Qzmx<*Oev6uzHBvH;zJu61qH}v`FMpy({yvao zum3~by8y;jmihl@GD(`2QVJ-4dMfh_d4b z<%}b?%7J>?sNwl~nb(;oJ&!$&axr~1r#w$vl1JR_@vZqgGUu`5Z{~cW(y@7KMca$* zZ`Z#z)=g1;uxZEk3mhAq8qX+Ojr9BAMaUG=30^z{8%*5!e&O?cGk2VP4^Z7FCif%n zT+!Y>us(mK+&$13JAu8Wb%&5^Z`-^(;~#fQTdtq?4Q!c?eYIKbA=vrgt$pkZIZDlk zAME=qbKtC+4_nJ_=kK_^X8yiE;O7;0KJ00uA-5fyJbLY4<&3|r|J?26Yxub+i^}!d z3%A?6vu+gL3H~4X9wrOy_C)6pIr_|=iRP60$zl^%_Np1DDm?~0kZ}(`5PARpY+M3VUx=U0V}-M;n>Li7nmUV_LUI z$sg7C*8LZ0(>Jj-ve!$_kKq^HR@{(7>_r`@yMez+%N|SqP54yw7S2#j6#gyoq_!EE za@2tIfhiBM-+3N70{v?{{foKNNV37%kM%tInRgGeDn{bArRm()Z)h_$HtpIkvWEE=`{s}Zn|GJbamYLScByAE!Q&0!% z=l!p0e>vl&^oPFNsJr4Gl*UnPMZzCSM_5bSa5gr0hR8(PV$HXZ^}FhZot0av*6>#j zI}@Ya`+A9EDtpeQof!+L`>oqbapu28y|DLnOWhRg;Ml;CR}J@0GT%4eqZ{m!`p|B( z@AjPGv;8ku`5NY~wR2Wyl0RQf`V7{OYU_hDWbB$t z8rUn*mE^p!oLNQ(tskZQ%SI``MSh2!6_h%avhJI9FZ;Tb%&(Joa3*@}3~U0}7Nspk zem9-Q{bPv}w1J0?SKr)gntm_)Y3tE#B@XucZe0pwFgFf3VNYsI{;gsCW8oeIRh#UNu*r)j#7AWD9m2P1XdOzwVBO$Qu0aa`lGq zi2I+$U(KV{@86D6zn4+JC-~d3$g`ht_-nn?mAWtDIQ-juHp$Ot8vWAcGwp-etxu?) z&$Nq2=Ci(eq&MuWqvErg+6I@;f)}l|c}@5%zE!pBApB;m*e!FCQR-yZ-;7)*&F72$ zJW`z~o;$(iISrXC^JsqXV$*5&syb?#{w?fnPyIFcr`E?m8_M~|og?(!{#W3ivq!G0 zzO$&SvH52n@=5W}M`(+_V@H=$GS4aU&rIf8Q;PgkQ%O!~O{4J7spM~D{t-Df4>>h& zijq-H8nO!h5xyB+PW4S2xgNBW$#3nbJX4fYee@CGmyf9Nx~b+V=DqZ>zqqXF`+1R9 z?6E6X&MSS64BEBgPv@0gql{(E6GpD1T@Cc*zu;K5D=6_5d8Fc4woB}SBaCs)Lx0(^ ztoiLx%72Lb{=XZ`)EKkt?7z-f)`$M-jAb@|onOvhyIlTS=*3WHS_~%D9uI~Dm^1SSd7xUttV=7PgwZBZd&0jB1w^^+_j$Yor6aF&k?z*cy z-CZ*)l=skICf(*c%F}H=#glH)W)+-Ho6g|AGqsocaeH23>yl54E#91f{)%p>bg$F4 zDIFOeQ1d%<9%W}@?#lX6Gk%nwU!O;3jFIQ{ewW1@*c^vFD8pZSQkQQ@3~6 zeHQyt*&Z#?#q2povyugF8!=xDIC}|-XWw0$=|KIwKQ>|)lzENVd``6OpwA3Q+t-uU zOFKvx-MD^*X4LO$Hs097-|L6WPdr~USoe@-Jj9vtdaaMUN1F#90_U-1POH}jxwB8s zz!>#gn+FdT=X{E1Y~B6fAMH8b?!)qK+^~*zyB}R0TdkS{G#_&MvBw^{j(c%Lexd74 zzmxezz?ti=lk-x{Ic$vm3wt;+&YnxCv-@sccx}GUe9X01zS%VM*ao@ZrV-v97^hMG zM;c@e0R6S5aU6HM9lwtK0lNc(+@pEdG0z_!;Jch+BNLnSz>0%>*IEnid*z{b1{%8R z*wgYZdPak>?qIX|@^;&?=_IW@zN%$F4pfRU9G{f)&9b% zhreY0f=7_Q4^+tC3uXC(KZnU)GO@+0Iyd9d-^*&Z0HR9Xa(H z^Ix$=g*mtS2xmHL15MKds&9z>OU@jceG`rgo;f#QHcXh>e@3lZQ*Nw#8~$F*UY5n| z*FBy!xl6RhlRnCx?+Jm%qb95S0|t(&dpfvdJbT0Hk#7O+w?VFMe`=_I#~x)@=03C& zg4-u3+f;BjXJc#cWR8C``MQ%kfNmZNZhv|R8%mA&WhG|= zuznymkz$(M1JXEN(!5#QcU<~i8HdeZt39K&1GU&s1Yft6x@A3Sb4(ko{gS7yX{#NK z0d9ROei3`Oj16l4MValce}pr2@RNOpZWP;D6YC)EKC7nCwXE^qfGzb4Vh0VdX2V$$ z&R=n_g}Wb7bbt1Ka_7}kfq^wAYda?#i=B+KkQ45&8RT4HV=sG$*egr^0_HpS%3Cx0 z#@D-dVfHgG9oSL-&cL1%Sa*F6zI}sp3&*pEy8bZb;w&KXPMkt~Kd6zo_D!pMTh66O zy~>(4eu$HGbk;r{d3nd+#4o`|&^dD*Je#@itM>&Pdp{%h^-T=U8;{LkGT#dL${h2_ z?Z*+v6yliDf7T`3t$q`>`wi3?YW5q{ z^q=)eAV}TyvqvI$HhRd}^hw8d6>NHn@s@Pf!Be(9c$l55s<^PVQcn7}jEP#X|HI=+ zmvYR$iT1je``+k7T3gUA)5Hu^`r;+F3&V=;1+%_PJ{P$Q5M>JBK+s19Xw+^GUIsC|KpIU9mQVuiN$(# z{WG5_t1sD~y6=5;FAvsknlmu|z))lDfgxkvTKFtp=TED# zc8a#IrtYxu{>=f>duhbDrq=zU@hIV`8<3OtQfJ>n&j0M^jqtJYZ+8&xl%LafBku3m zIqq22p6CzkWl;MVq(5kH)b#J54&WnMx0n3Nnw;n@=x(fE)z$>>f(L|N;(-AAT=ASG zeOLIU#onf@R(U;ZvuO>YckbWw1wV%5Kjb-#R#tYG#&4zK)xZ8G0@bst1 zBWH!zuVpXkiJB@`!-1pGX^xS72lSCZW03Xgb-SAf*IDpwkbeK_Gt(#GQ&SgV^H z3=(JIwPW^O9egKvA@<(aUJW!}|60)OT2dRla3H<5p&TQBQgGS_j|Sr+We$KS>Fj_gAQ+_ig5-a@{pGj_-- z51;AS;dk&Yhm#ne_A^a`tEB!m3roWbW zyNv(8T30hz+dQZ7C{MrDtYFX=pWAOKC%igAGvaf{+<#Oo2mOKl%+$d=>R=B#6f$xq z`W0@&*0x`hx$K3Xp#K!-va(-L)+B>>uS2&Xj?>|fTKeuf+SSp`ex;3L4G4SpjoY-l zZY<4@``PnHT=qVVQRIcJv-O{D=db^6iJLp3*xN7r!+zC=9C`3P=u60<+B?zJ0^E-w z>tO*^&uagVJvaIdb6f1DH^8IJby)L8uGII>Bkzv=UGg&UAnPsMFU+`C6WslHps{zJ ztTUmDtqpLOK%jpIb2sK*1M9ZWmbFWXN7_ox1r7J}pz&+K_(=Hdb z$@+zkTksnL(&y?#4pWAbj(s2ep=4vQ$>x{-nY2G{#W}Ik#e@IISzYQ4p1_|S|8vB@ zSMeC-RdxwGe%4rJjd{0DTI;SVtufb~Y>(B9%Q9c(TnTGa>;-v5>8g!&#dWFW&YVi^ zh3D>H(eeT-K|ZpRmTuU3Tc^)DLl?XN+_7tK!)!#V-Tv(XrpyGc>s2q2}Veh_n4> z`y1$qZ!|Zq?B)G(vzdQ+QsV~tPy=JvhV6XIV>jQyc(r-p##e_1-hAU2^K%V>{yjCC z;6}bLxNplFhX?EH=OCvVcGeFaZru3B?{~63$bHl^5= zZ;-Uj!risTy8l!>Vodsx77R_|+l9yTeW$uW<2-B}2l@8TrSAhz3N&7Nc*r=+_dzV& zuJ471IEy@K(%a@z_Of6PG1u1D80(&64H91DzW9Ap4;~h|DYh5tza&3I_WRrv&#hl~ ziYtd4JIP+*73o8bX(-?6T5F6n}E;leU@*(@$hhD*Z;ymB}xC z(789oO$VKU`+4Ef@v<*8DEm`q?xyYol+zw>gChUYSA(vt@z1$?p1a0JEDLKj{WBzO z^q5llsCSLLD7jyU&RWM%^@^v3$G8Z-Ci1bH`(yR&BJ zi93Hdu;I4e!>@7#B=ZlM3QV;ZqB8}WlRe3OIk zw$ud&C;fCz<3G^vTKGoRF{cCvT2A5bV*-tz{{5#1Ki^Wr_a)~T$LtIAUv>)Lf_op| z=A0A=UUm%jyElghC;ceU|NZxA{m)K8`$CX-$21L$|{ZjO(hwy;<>iecfqFCZMm{ zduVo*t@kKDT1`qP@Yv(VYobQ)urEoaoeA7sunkui*e_pALHJAAUM z2H7R!hO+mH+;nA>-Jk1Dlm4v6)iOC%v?UkEXvhC_H8$JhmKsxS_jS|#GLUerKK5@% zrzCE3v$9=dbMeS#WQUU1a-X|9#>(BCl#w*KBdaLSPA6P#V_jJEvk7(@^PDugu%p>& z?CYz0JGlK~bb)bV*P$-|8CmoM^bOdTF2=ruKhZDbu1VGgn?h>bA0bbVDEa2(=_?}h zoN=YLm{0Pi@;Q@y$~|UEH>o?*&S$ffnftv0%xmVz{av-hA-4Ovfueo9&%JlGDm!S? z^c%|V15@V<*21^U@5M$T=N)#|G49`d@b^29pDf6DC;S|A+ugix2&j3_QAdkD zJ+<-RTgR{_eS*2__BwUe;4D|)Pi?`QqW(Z{D4^*wV2 z*YyPUozU}^%q6iyzqPOZ_CFeRx8u%t`s(}8Q+9Kg%k9T9N7an==olBFFV#GBG`fwp zZ|ZYmPn*;zdew?OL&o}tng{nh#Gb4Z?0x7jzs!8TzEX38A+?VTCOVJf(POpzcd*ej?+hYE$;4 zJ9!B(h7Py;h}>M4bNK3B_FRfRiTOU`FnZ$1VVLV8Ym4(OnWqKkEoPoLSLBdNk8gq4 zdjsd~4h$S*KKNzkdNbCk`EqGKxR|+^uErlDe!tR7$zxGB9qxZ#aceWwca8f3ef@)h;LMxR(U8}tJwiNxK;Hc`?h`osLR{GNgQs)< z&FMG8^G_?CQr1nH8jyv|ftt?zIdY3Id{<9&G8sdHPCGN-J3(aU0PE0V-xJ#iI%;kI zj2onXV;6Mi+%t;#V|_7bm#24jKl!rDv4^qp1e;e_1D5!ey%1Zs#3}RUrrOP{&z!_u zYLVg%_+nJPrVU)Xe-&*3|4zUjzz_TQajpziYen0i;=J)9Y-O~^ zQL$`w#j>e5CZiM2B>(WP*y$zz$fAknts{lqt$0boskS?g`-@0Z@Ll7Ot)vs&anta& z+de)J+=Km_^{L?9>_NTzChm89s=Br#Z}zz4X*=?&+Kx4bvD&VY{l!f+a|3tPRNn^b z9&B_b>Hnf1DZ8xG2gPo;Q+RvbFI7D(qfa}!(%EJD*FJTh*!i@pJx^z>l0DQiKT~s{ z=XCz&4rRu7;YFDTG1fZs^4$?N#?_5AFK3SD*|+v5rW36`9cTVu&saTe-oiK1PLAkJ{u6?3ra2$4k2IkET4cfpx4ety*IaM?2jt{7H zd70~P9(Q=K=1R4eFMQgFJ;7N2s3x{zcg<;V!%wJd#&8*PHgoqsb;bJA z8(^N!+7x=c^wWVa&e8^JmhgS}6Xy)PmST?o7~k{l*NpDR_@?e-e6#yUHH}vU1M>Yy z^Q*y$=7ez*8#iKq7$>^EHgRAhW8h1_lDz`hw~_HbnWgQkANO|Si5D~8?$-ut8nphq zYP7~@UmI%t`1O2G)YSUFae+2yUat+lHpsU@O>N+@!$Si<>ehnaxKSJUDc?xn_oIN& z2CzL0{PcRh>D{5emEHf1N6Fv6YlHogukK>FMiu5UJIswWinj08U&tAjS5@6|Pms5c zWL?f%M@pw>f5gC{CyyD}G7H^cYGB~uaT5m{CeImslR43wNo?w;%RTta=jLkzj~*Ht z_|F309&P2DvBw1l4?WD>=!qd?!+y@rjC*IWmpRW>8`vxS1naa9X@l#Ys~LE%E?}(N zuKI_&7Cu=2V6*x9o(Y5XyQMCbZi4;ixW+>XZLmR`)A;6|A+x5TMr=T0?+HFez4yN{ zbl2zehm}2OeNfw%UwL?N!-)Z-p?*%|iYJE#4kh^x^%KqJEe(^*t9MNv*h1b9ZVU{( z`ovI>c91d+90K3?=#aFF(byO;eo8x-tYu7kg71|rBko6;yD^9CC;s2ai~1|&bi3;SAs zLOBmIek9boxv_o^caI=L`(9T4Os)Oy-*Z@a%zeTQIy-|k_0#x!;pLZIeEFOY>t^Tj zu7cIwZRO6@SrXB--{{&DUQ>7ncy|}fbCze?IzokRH%QJZ1=0=t9q;jfNymyzdt1&E zuYQfSTGN)`?*#nK;>|QdJC@%herBe<-OA}pFSojT+k4JEx3^aWYiTj^&GbW+Vbest7#Aw6HlN?DGZqzAUsUK^enoqmX%VoqpgnMGsobsn zeI)5UjDLBg9=^@r=d^Y%x6bL!_IC92p3~hGIXmB3xaOSeu354C9IK(QYUv7QrrJWs?Q|><@*|tte z^y{RVBCS)LG|M8&n38b!*@fPY4y$lZ%StIrp|`uo^G|zQwvZ{TKF91VSa!LjV$W&o zu?nhC#Opqpo*rv?SC8J)spr~OwB;;4yIQ}_;_e(x+j?TD4c1bRuamFKaQ_(cPxzoL zU)9y?a%*{KVKte!<+r+a9&v>D2_O7*>$TXNTJU#vd$N3~_?VWr3LTkt-4eDtSBD|2 z0*u|;QLr**YbM)n(I;}28*ZL2zt!;nl9NjOzl}O|{vpd#*R8rXzfIS2pTO-JU2Et4(v7;dZ5_OfKY2t(Z26q7 z9k^N7rsAjhQ~3W3e)v87S^l;%x%N);nx0npA*Y{yx^Cwd7RmJJ=T4YF_*DmVt$}wR zZ;_3k<6Xmh6K{#1MzYS;>9G3Bww_jG=He?BwOlag!VfLFe9ndQJ`h<-yR2v{bapJK zRgsy6HpO$c8wU~yZf-+`Z#@$(znO2%m?TU`YNkd%x3ovY*i zB>ozC{||5BAvfH+L0e7|A^lR*7Qm(+hU-H2pPQJBD~> z@f#t3%R6)Sh;SbM-h-d+I!)7gXL2ht9j4^04M`!xN4K7}R(B#mdRncvf{s{O*3+uB z67F>TyWx8Ye>B*i79*=Y;)X)!^mcUjc6Gr;R_+|TcHl$ekv5e6Bl##bn^d!a{!gv17l^0Y`kH#MRA19?DwXwN>g$0m)CF%p z-z*`F%Qr_Llg&(r3`vXvy@l?!6;?a4%e=O?tzhZPdwZ-^Zk75p6Vw8;Rp}=GK)Slr zkE6o4W5j6uBmJ@a92K`>(_x;|*d7%Mb7;GD~%ElhL$C z?_6OO^6i}~5gHUmw8RXqWko3Ej2H`6DGS<-#4Ebn7x)Q3Uq*67)ZIgmvh>zWH*(Ng z(bn19P4#4nT}K1$Msds`+X;InVL)dqF=k7x_O|OXYV=>uXdpG5MU0U}dOOm{Q{DRs zFS_HbH+BA{Kld%EuWmp1hiI=S#YF2Yx2wSNh_XmAbZR73~i{ zy8Y41qh5D!U-!CuWnm{ZWY=1EuPNh>N1FaMeOO8Qx9p@QXj9*|=e%e0mNqFPgI)Rp=p&6`Dsl?i4t*;Av$VO$m~wrt+8Kqvc9d2k z)u=t~#D9>ukK+d$FK3 z2YUk9*|DtD9*Q3ey4WmO{6sewEb>8Q$npGStPo`DJc)GCy$>KPT{$cqI+_Tl~r25`V+*8Aqx6x<8`-{|>nXK9RrA0d!Qvqz%+>PnKUX_dwe>9C)4-=P`C=+l zjHjru=9l-J)6py1f!2jzX{R=R(vIO(;cz$-j)skJEF2Ff!pU$doQ{Mekw`RRL}HP6 zBoRqQQjv5t9F0VyQ6n0Q#-oX7GMb8}jj$0hqK09_jJT07l19o%$HK8lEE+Rnu~y6Dn=yg2beIMt>_75Ca?)QQ`~$H)^*#ROdg_tNq_tpVWqtbyj5Rzz2fHjSwf!> zzndLDuHV`E>-&uD7s9;q@f{^JMxIX+5FaK zhlWHimq*;1`StkR7U7n|P5O*H@^0nVj@uS-m^*3m!W#k`YiS6(Y`tT!dCy%%-#ch=*E~(cZ+}d%w zM+!f8QeR+!oe|07CTNE~F*Gzw7=G@grAz&J#98X=Ve!{KG}O!+f6e~-dI9&T9YaIy zqtFlGp6eW)K9%(E?;1IN8IMxXe{k*4&_ezu{mFB02q^t`A?^)@p`k;zd$UtCMQexl z60|;>rq7qM@we28{4t+dO=V{%FM? zFW~={>xYK+5|%uc^(V>0A?OP}Jv0;(I*+*V`Aw}IH>o3e#7)Po2RC6=dBiOS$a(w; zKg@T+ro@xO4-(H(+;73}X#Khm`j7iY?$;82EA+WHj9f2L&%2<18@k9GN!P7s9rz-& z*P-p@Z>fWk+DQiV`)?c?>aqP4!%N(3GtwIPPD!&vbNN*Vr=ZP-HX08|-mk{bv~{KQ zy?s>TUjzL`=nMGUn|BGj1=_^*Lqm@{G=JEKq2CYvMVlUW%PsN#7+Tkck!c5@g*Vb4 z9Nu=zBx!PVNYif`8k+6UylG0i&xStx=5k(W#%&sI(ei+y*&^xRhkFC=u6z~xF5EQSWPFe|cKiJcxNpKeChk0v zzgKX(A2*SW_-!6Zwo05+#=*CrE4G_TU+QNz?z28WG?cQ#59?D4pf_(S?>|d%o9}b$ z!EK?(P2y%7jJ5=~E&MIK;H`Vf6QAbQegJ)z(C6FoR>JMVeJ}2t#GUecWtEh9ucY+_ z+Q-gwc%(Ax_+!hEw&07@xl=ZOUlBjE@pIk)<+o)}*zZU3xez}Kzce(ol)t4MZhN%i zz6E#5vpmwCYjE3&Tdi`j$AL|_ZNlwwar5+NiTgfisar|kp-J50{y6SSaG!6xD;|(^ zUc`MP?p=177W(V-9q2FI=J3eUQeLN^z`c&U%V(0;S-8D|n=Wba2oIl!+acWMI(6pu zCGo!mntpqU|HQ2ww`SbjcqNa0xTSC#sof>aR_OOb*ZEr>3G)DM-^Q)h84LX7`Z4sa zfA7e|MRuQ%aIfJ0BJN9_am&jqLgy-WZQ56nccai}LqBgT@?jJ@(`0S_*G7(C+NmA- z#%)7GtN5F?4ZH2P7We%lxZff1Z6EIc0o?ELxl4OIgL}gc+S`tQvfCa)+Yjw(XinN? zv|1+44?}b1o-0cw&pNax?{@gs!_O()pTXVbU1_TYxP9C83zqOpaeExMjr^_EEKy7* z?yGQ*-BZr9;=T#@9PT=QyZuMp@4>wt_pP@3rT~>E?z?b*eFXOxa9?xp(9j(|{|9i_ z{;}L$^4#NoZ%a6LrL6PDobzWauT!sr>4qq&m4 zvQhkhvzV`8a_k=Hv+hTqvg6Z7l4DYiAK-8DApZDU9(lin+eF-Sao`btIE33&+!l$0 zN6tuDr(jH32(7{C*WP|2VPnu!4^Ribu#(n7Xg$zkLgNv)9B!L&ld$rL+bZ0);3j{| zBkx;A@VC|R=eB{g`2)CZC9IS8Vn2EY_ZM+rBN0;PZvT1-_vQzSykB&GN8-VKiCs=5 zt0n#^OosP9G&FRz9gm7%@;4jz={rkh({XFYZ7y#6?Kno%&2#u^_!hit`zgk^2KP<> z>WuTmC24GO+-CE)JmR(uw|jj49(LRi;p!28&){|k{=7WA7q?qHZc@J2aa)61vxIbX z263N=k!~CA^KJKHy-vsd$GAJ~U35PW_bLB2G?cT;)g|>U`Cf$k(r?q}ojy{D_t)b8 z;eRjo?K0jMp4kRH_1&SN&33+uvP%c=f_6W&TkJe6^pDBn=Oz41ePn28?I?bv?i%=K z)uZ%R{+37Frt!~a+`POO#_bN=TE&xx$L8byiqBo*Sjs==J?7}iU~%gax80@rwYY8M zpD=C*B#)lwjzL|a>CXGUf3b1Qc`LkFZR69;b~ZH0;-gv?iNr$TP~z;f&cd)34JY`; zF{VY%%12XXIGo7DQ|b8Gk?S!AMXqqIC^$8c80cqbp?wJV+$6{)gwtsUYjG?Ewpu;E3|;vX=^9f6;>G0 zwrE$RWqGtKjMK2kTLrb+ABMzssWs?ozf_GD(5?fzdq4$043_TgQ^w}9t+@T1_3;Ir^A@%8s*@xyW#^Jc4fnuk!eR)S*kC6#6S*cMq%J6DX*=_f&8**xkD-_!D4v zkE-A=e~5lESy#GKO-(?%8~h?z)ff07@Lq5q=?Q(a5S&NqU;bQrtnRo3wCz6nZm{e} zm3|`icQkXXA5$KxMdd#UcK5Cd{gdG5p&#qew}bb4%HMw(;}clbZ%vK%IC%OiPJ4js z7E+%cd=XgoVumGs^8Y!o?01!H3Vs(XdtRFz{M{=wt&i|-{MsU9geSfZu)D`KKziQ< zyZcWCf1muikJQia!L`#*Rp|w^I_-SsS#wX)mHs2;y$$^2Z%h32DA?WWDed#r<>)pp zo%qjQ%s2{`H4sVf!(eycsg!32SoTcb0$p(3mGp1h_%q-&p7=g_6*8alQH?6T z-;%!jNdAwOxfl7>ag_YFfL|cIsvlf#0yqDzl>b4QQ-NpUU-JJ`@G1{|JdC~(?1qnl zAMnsyz>jv{|Nl$wm}+H3`Nb|Pb=ZyH?h1t7x{3958vv;-}2!XeYiM* zB^hbI(~d4rZ=Mgg`tWCb_!~a_Lmz(KhfhR*b010H@ZrmR_!=MH;KQO{x{t*7h!6kN zhyUoqQ;%^&+w~Fm;mduv(}!>I;d^~}j}Pzj;UOPBSs2NAq&(;O@Dd*ueawBt|0W;4 z&xfD%;a~c2jSOtgBk`T$!{_<%M|`-~hri&%|K!6@`S34&IB=Ys8@qkp>%(auUhKoy z`tWCc_+B60?ZZF!;dg!bJ&oo0i~H~rAO55df7OQ{@!^+zm@5E_kF?JWAO4^Zclz)q zAO2?_{=N^t;=|)*)%Tkf7?9%Z^OUfZ65z#y7-qf5B3w#CQY@mtb@Aod+Fj&&PUi!K>IxY z1&i9@`uEZsQPkud#a0hpu>IKeGx3@d{v7@V%dq0c=cU)3#QX!gH$B1j6VN^Y-91|% zp4xZ)U{op4%!9*qbIrn7h$3vI+g>FA~dA!)d z|7QG)4~c&hxB>l2e2PB&2XO5lO7kCy=fJhPym;*R{5agLE2>NP<2!oF>3-a>qMYu> z^H-MBy?7cOVejut`s>BuiR6DWIdbb;_T}1-oqsPb;C~waVH@TDE8v(fyzJ@qhWBIH z3+$zP@sq?i*B9R!pMNiY4gZTg{@?drY;PWX3HU{@@SBvc2fX>!68;D96c3hsJ-$Yl z7mrcsnY*6*gZES`T0k%dwxjpb71#e zifRuwmb>SF1fK=YQJ#ns-<4qZ9F5R#0KWwNY=?dy*gfwe^q)w0@_&v)|8*C*!B6+82HP0ZFsH3 zU%SC!u+*=r58e|$jiY)38eLO+q3KkoeQP!2RGThqw{H4g{}N2Ufk5i9^W(*<39pf! zOd}<|ZQ#A0_WnNjfCo!7;Tv^%@!0Ws@!R-!&-h4uGfpd=^%1-f?4H>X{2`P5Pp*8a zsnhNROMJpV(mucFz}^9Ux}?VZZdNDu05?C(5B{e>dw~&4YQFJF;&&fuANhNMFTXF1 zfo~&x?dzrbe-ylg`f>UHx8O}+w|`A-qW^j57lL2#U`c=5I$d5oc76Hr+V#4k3cZ8y z?pY(LpWDH$#CN(1jr|0C57_1R--GvqrM|@fb?x+r8+C10ja`3(U`cN;bg9qt3z{~W z@+o;n{aw&w*N@^~=sy8V`tr#9>leMuuig3pzqTeZxDVi@w@Hy0$9#FdG!^+_G7n) zoQZOAY6kKWya@-lKY8imZ~9HTym$iI|5+=(mC!2=BJP!mbB7eL9cKhQ6VD~(l(9;<^{k`}X{y2&L*i8PWN_gpi z@Qc)6k3(MxmilUT@D8xlkCN|%f4<9ZzeNuHiq&@eZgKE$z|vlO9X#hcJO4nH-i_c^ z(x2$yJ3fhg1H1kCr(oe1H@@XkQ0H;`_e;L|y65w{XzS-*EU5d?oF7H5fKh^jpE(JoK5@ zVxOlzCK7>^|GR7K_|J0uU-~IK|Fa$Xjo<~I@Q;G`g5CVpTu=IMmhcv^dj?VR_X2o7 z`Asr;>M0eS7P75p+2t zH=Xocc`Mj{?DpAJ0qb8X_wU7z6aQSd{G{-E@HP*YboTnfd+|wU;Ne!C8$Ip(b%W(x zpY$I$zk=;2puGB%GQwfqJfH#qov z#P2?CfA{7`XmS?Ye(d&~v7_R_uhSLEj%@~h;fDh2%J@qa8GW6Gg& zx}5iQ<9k2!mptJuu$-q<@{JadN3i|aSk7dQg?IVrdn;f$v+0e`k2im%obJc>e6>Ws z5`9A2BSwVMzTfM#%O~+md%m}u^)%9xJ#s?-0$AGX1qVM4mim+aE%Y4nbT;*;_>u54 zR=_`$XOly}9W3pYa>73YmiBSO-?kDu`Io(R65r$3G2RiLZl-YRlgJDBW3Pj+0ZaS1 z;rEJQbDkohj_t z(>z|hgYd;OucUV{W7FOIeu(}xk^Uqhr9Ul4UQ7GPK0+z~4+-x+Zh5Z0Q+J%~^p^Ut zoISN4o9@NGCBCU|mDXFt-_;)fQ&Bvok{^+;VxO4<-UeOv3A*x0u>AzIPeDKL?Na^S z1HRgWe*|9Z!4huDHr)>H)R!N}d~~^UzGHR{PFnz2K6KHi4Q6N9{RteH_^ejY(O4RUblSDf@izo z=`Sa5)U>ZbpM`(P|KEXM^3=~ifZg-KLcf^w-N!ATH-AEV#gkvbhkSU`4qcpi0-8yD zf_0GFKfLtsKyN>+EBmwX-#KATn>L zybWE>3^w925?wq#>G3bP;a*){JalRvKW_cHuH0R^AK&v&<#a#(@i)uqe(df~lK5vt z=+D%Tw|ri@WW?RqQN4U3*7JVKiz;|JoqxOoK-!>@qZmy&aJxXZ3oL4)<%c^1F)QDo$25|g5_*$%E2=c zlyc7XJr4d`u$*~4(ZOrLa{krL@7-WI3p?JS|0h_^#ZGYWyI?sV>xQ2d*VI{AH~uTY za&Fem@AY6gL+jSxyGI;S>0TU4*%bL#^1sN3uk+!pKKvaY{%;?C z6D;StYl+_-U)*!vlAp`c@GEqwZG{70d?XUir0TCn@L?d$b_C-f!6=gR-@ftPyXKM0-+ zK9)!%zAwQ)v%vBQKmEkPF29}fennFMxaq}q>W*VTJI_b|h!3yuVF|d%6JGG^74YVV zb@9ey^NSyczojdxOZQ_rOKv{_?LD8-w69X$CvlMSehhqzTR-4;z;}S@o{IjJTbQqb zPj>LY2<7p{FX{Zilb+yLe0c7+b#dmg%j3oO6MxTlb@EW+Kf(56`}gC?yUOW)tUp#x z_v5gSzR-ua`S5*@m&fPFwY$sdsS0?ZkG|A{e@6XF{nl!>{CW4Y$j`v3Mf>b$Kd))) zz(SYyd=}gXu5<85H?g0M_@uvyeEu3(;-Bi^H%DmCRnYB+^~dux?X$$^j(_65*+V}c z`u)(|{wDPO9(o&e_YMN-ZwtPNe89h?FZul}*u9rP<=?^5(tV6VR@P?%s(Y>1_bJPf;Ft z{BMIUcO$sAQD3NO@a) z>96tO+kN;UAC`=5^`s|Q?rgB1fc7K&%bgRoIJo1LV3#iM`#t#5zwzXc5UU*Q<(C5< z{}Mj+AG*AF=s);x_O$Oa;Q1abzBYOMzXAPnPkWu(On>y?1>iMc)gQ>uO7J4^IO37^ z{Tg^HSa&clP420%AG^K$Sndk((*1baf0onz_ zR<4I7j${?1hkuc{&)EBV?O*lAAZk;c1-fG zq(9e(JAL@eKD^t95BTuObIaqu$cL}>;X8cz2_Jsdhu=G|JpTDU-0j0(_2H*{_;nvX z<)ZTVKj_0k^|r^J58K$~*WMBQAM&)Hgx~+)y1aO>55XTom$PHS?^}K0zvshm`0%M0 z+cC+%(w+-^c%=`2&4>TPhY$I1)BN)IFZJQoKD^C`zwg6u`|ylQ%Hve0Ho)8shXFZdzsJJWS_j!p1U;MhsFy-e`Q z;MpEL6Rd$}^AdU(e4dAXE_hX=tzQcLL*R|ziH`rj18){wYlpuM{LZnuwg&zY{~N)w zA9A7Ne>Yh4k0}m5eStk++Unr-V3{wu_?KYOzn3`lY4Ep6|md6tR1z^!XS2_NB!J=<8J9r29 zp7)gUcfw`p-;}?>p`Q!Zus@SLbJ9933l4bj%D+Yb+eQ9@c7Aq%MgMZ^XZ+>VFZ07Y zocP+nGXHbA{Dd5rX&@_i0Gm;B#{ULyIQvj}-We8T2}4}e$EzI@_I;b*V3=i@GY z+*R-k^{+er{|5XL`ITp~RJX`~HtWr+m7TUKd#Acat4_%|~s0{%Qw*6)f|ysSdvCW3=z{?7wpG zm%*ZMxcDmsl=-Wi!I$(N2h04BYEt-Ju;@>l9sK^kqkg{)zd7yI1D5%c>;D^I(WhrS z{*V25d3mn|d&~Pnu(v#+mh$p`1}yur<$f#4-*>_H(;ia(V`-1p4DAAjtoZAj;JsUQ zZK;#~-(~IfmAL^s{4d&&5A?@F4!!*o)b}b~>vQlQz_LHM-N7rbp}&CVJLMe&%lt*o zs7rpX#-r@lUE}y)1{QnQGzb3zEc=-jIQSEt@YAPsbqAP)zo9^RcEFEL{qN`nQ{T5Z z@vk6anQzCO@UQn#A79e7T@Jqg2HQTh(ZPRzqdgy7;)MT1KjT@GJzqPPS_-YDJATc! zS4;Zl`ttUA671#AGdGmC*Uw2v=D%)vKYp{VAIbhGiSH|)DVJyG-%>8mF8i!)KXL2l zl})z3FX!7O{37&0(dV~1<@r5W=IgHi>lvTD@=ptK>vxY9Ds;*Vq zcIeJ_cWWW_4_}Uui%jt>XQ)G5V_#^?a%(trE^_65RNk#zP;CEYzqM}5?25({g-A>3 z`!+3v=?TU2F(aC>Qkj?)x1!O=+2*p|P*`jE=%uk}%k%|{rcb~8qUnpK_eR6hGu`SX zmpq0--0&C*&9$<<%cftvXu1K6BwNGje9j0b;?Yz%nKyEYc`6qwlEwmuRcNs$Ycs`m8TggZ?n~bHSiEKKR4=2)QIBi(5Y%1qew^Y+# zBVREtt&CZTL?oQgMq)`r)j}e!iatUOE}DMf^f^*2Rm#e3o=cbsBVtAq3De3&lDX=O z9jm&6l2!YRM5^~1t=_9qwbyjjK93-$;i@C8zD(5@DPDEziK>03G_HAV3uoh9%Z#qh z&O*9FtNx9B7 z8_z~fD;iJ7Qc0LO6N_ilc`NMcl_IQgInL&bbWE7Vj}gl@{M&6NAKu7rJGbtH*Hi|Y6M+qR7FDWvAlo3pTG;bm7KgOf%$ z8A~9iQWn(}j?S~I;Ygy3q}465EoNtXuEo7smZ)Q~sF5_|=`12X!G*fTx=A28!-Tl#uH%h_v)nskWfQS{I-2M9kz)U^>@`uLb|Pg%Qf&B;G=fO%HKIx&+HIV-qGl`} z&cySPT#Aer%Mr_%kyJ9Av$C;_0S~0O&ODs55+P?i9)k#Dj$VBX(_;|Fs-ehOH53`Eh9Yr| zTcL9;e6NoGL#bpUpF`eo2YK8uBXMVx5xMF4J{#WnW{Z^!XClb0w3)NL#T0v1_GioL z%KnThS6K*RZ1Oqkn9Mk3sk9*U)_j51lJKfC8vE^=Dq zg7}tf+cG}A5aLSrEW$LOPvuhioMqUx9IosoTG@+H*-N~#msn*liOOD5mAzE17kXBu zs-u627x}8iGCpU?R3k;rS_aqIhqKYN!|O67459F(v#}IB63s+2*+fNJL>oO^bPSrI zT_fpP`Fu2H8u?rzAC1OMr{6`!B8JBzju~xqtdPkuh}7}uxutf;AdZzL(rb*6v9XBp zF^FM0acd?TO5|hcCPpGmM~`Gvb~{JLpoRH_mT9$^d^IT)M>{i;RwfZ+qMAs$YB#2X zNGOw!q;v6fG->jEhD^kff?`$}g+`*I(h!QH(h!8B(qdZIHD-4z#HSo&AP(mfi7eT1 zGdczlmK{ALJUcqk7>g*Qz%^~5NGzYv<-(SgOh&_)Qk))?qvNHM2~(7bOe~YlTPdgB z!hA4uG+JZ~T67GWF$OI*1}#1YEincyIR-5?1}!~0jXpPOz0l=Gr;SlBbhy#OjZrTs z3tiUomO|cSI+O~evU$_VE8n#0?rG_4%Y~x2rlPU1$v01sz){x&-+1onbVuZ<8PBETsjQL7 zWcWaet@TDUv$ChKqh^VjFrL5`7E7eVmXQrJ069r5| z7SR}s7#oX-#@3Sy#Zoylon`dRr84Pc#wm!JsmF@u(bR|*228n*ae;|Rl26%K*;G{8 zHd``hD(h-`c<^%LL^5Myb&Mqv`E)WFPh$!ZE3cb;EIKT_GZiKWeE%*Kx2X7a-6Qd1$mbsAFN&I*Ophx$A- zZ$1i?!!jI;CR4n#F;#$g%4^B=<#lAU^;Pn*R8@|!`cj!p2?|UAQ^{C98p$WaF=Tco zZddT16Mx!{o=nN~k}nil83W5oI-d#0qbm0XWsbIW#>EERos5;+ql@)nXV`0v9?43P zDq3zaRK!)%BpXKrSlM_oo6d%fcrO3fO*RsT~Zl5Fd48J359E*p;K5~*xnR8Pa^*1uXFoMxwuD1I7a79Y357?|TrRN?qvxA^gV zdvABEa9ccO=DFoJ#uPWl47V&<#ZM#GR5WWu^69*pjbxJfWSTV-XB7j}mO-CL=OU(& zwZdUDnL!Z@Tj+y1Ght>i6jtjqQnW5rjFj=a>R4kgW7!5s`Br))nzQm5Bu-0fXXiCh zL`82>)^GU7Z13#uEm-``Dvta^rO9W+n1AMT=`71oG5Si?i5HFJ6^j&At82o1e_}o( z7hQ5W-$q|J=h90qB-2U5%tf=|bUK#JWU`rrm~5-fcJv5ZqG&y=T*B%bEm|}QR*v-u zs<>$Xs2pq2C|lWU(JEWft5JPr8AlLn_4R5br86Y#0Y!}?nEgW`wZ0Mp%P4zA52~@f zxalnODUU)@0zyW}qCAO*BiT6Xs0qsqN1`6N8+e-yeRZ7Lo*30p0)S_Wjbe=8N=SV zP!@#|=|T(cX^|OHZ$57oTH5k0CdFqAX_1c$%b070(=om)8RJ{FW+ZYX#Vhvg$~95s z(aK(n+*HwPsgqRn%J@}vtFan4D&rL;e@<3|Se?yeQz^rWN0L@LnNMKdvBK;v2&Y4( zzE;_5v34qZE!KHuuSbyAVz;auYq26Ldo8wPWv|7aQrRmu{ZX5z7)=bLUp&k5M;N1E z0`p)xnN6Z6q|05E(pCNZ&zYV@{{Nl+jb8UyPe*N+@EEir??q(m zL@vQMJ#xuxG@MGa?v7D7k;7OLMbw5oBV8r0EULNcWJRylXTUSoSB$kZfLHWd?9&x% z01IE$#VU>Ul`?>E9KGqr>TaqJ$%qq^kA5c$)^hgrt-?IlTi|=j<#!i ztrj+ z8Df7>z7Pss)LG!O!nR#$VPLz&VeDX<+HX4*)FqD2;{>@_Zx;G2mt^&6JciW5gn3Yl;&5{~CGd>%SuTc*&nw_>RmF6R{aL!1UIwCXYvGZe;n60AM;+(p2ti{2zve%;Itn9U@6IAwE)Cnqk z9b=w~A<&i8Y{)__~=}xOpl51 z5wAqdZR=(){A%gk&KCMy66wXZ)MU(zSdp0O7Tqh`dd$`kJNj7@qZXWmBs;^GONI>` z{>79?BxiM-g|@Dqw$2Vp$~WNBnQ%JC5E3>bX~nVsk5dfAio73=7+D0H!FT6OgI&3i zG=eJ~53^lFRy5hLROF}1UW?tNvezQ-SM(aM-fMA4su*dpKUMTueN7d$){1c!Wkf}v zrBSxB*W%by*=td1SN2+c?UyDlm1C{GRwLE(Uulk0IRn)@RTG1ii)rn1-STdSn7 zRgSg#)+((8RF1X!){0i&S|uw}>5-(igEMN3Hoshol8MJv{4 zM=`G)YxVUSI|A8SJ!{9Ruh&@h^?C%OTb#{tqt0;HlO(ghmQ1#@&=bnBDal~NUNV(P zqAoc5(nU*(IJ&s(# zP;faPk451yGiI0#L&;n=Yq257-XI#S%2%W+Ut!Ij^+fY*j>xgkDxHzVWoHxcSVT7T zw6}LMcNr;U`N9S#F#Izzdq;{LLkKObvzLu23)H)~^F%7huq^g$unml@Mn;r#E24tg zbNh->4AaI&JU7W|NH~(F{-Yc`V#ic*E)>q@vtf&A8wzYXo6Ka{t(!A*X}0jNQ95as zmU=7tEOmlPahCc(C7-1(P{}77s77z8Vl;V+t;pdp_8lvkV}cq>#^UizlqHp%6-k>W zpAU9KNkyMU`Bc$oe5|aENla*}{S)khN+vTF8(m_#e8Sn>6&{PoMmpIJHF8MLwlKIQ zZ5zp0W{X6-umGw(-GxkhBx*0jvC}@^whBItGqsOKV^%(!W}k+ISzwGbisLdTP|0;R zVX^TkW59svcn+%?cH?l4iBl?66v-8RmbP_N_Bv(-6#2o(v41w6569A+ro&pnHWRkl znw(`o-sNLfiTx}3EU7}3y%sB{ve#l?spu88ZH)FPYBVv+v^WUCS?OF>KFA$owcTLz zRFWEqv4IMn87rP*2T98=Pm`XL$g=Gy&oSs&j;)j#HtR%_G4_g=l+(&yQ)4BW9E&(+ z$gygKiN@&F#cp6^aB=J62-Y?g*0w)8W@tK2o}CTKetL=eQ+iUNBh!v0fUU8GUfHo0 z3SHXiv93zDid!7XOc>NsIAU3hkB$h6%NNh1u}of$N}3sr3@LoYB8ey+$%^Dl%vsTA zQ8rifS!~~mK8pgdqR&#-sOYsc_o(Q#v|?Y`YxU(XDd`nsjTa?XMX!lsH?HipD4Z&K zE%xb(K1*vBmAzJ&v;*gCg%Y#Xd8O8?jg_jb)+-afs=Zd9f$$N;Dm7VM4KU%W)@%3( zVimop$_yMqy~TP?X~(0U{&SydbHB*Co4M(xo(BoLSc2RP=6`|oBB)5uH`Qi%LO+{um`8z;+7h(gKWtu zx^Qq+4n~*Vu~j76v594^#ok}i+p)5(BS*HBn=+2LAZL|95)so$X~u(5z~FSZ!I`0W zr2NE?J?*h=OwQ7x_tcPmJC?K3h*66raf`LhTrR`u7-iS8=TuG#ar*|ak?zM@(7Dno z%(qslOQPH>vdW^5X0SrUSw9VDbNPsvBZ^bD%F!?G>Z%aEg@uqkLIz8NMl=?&k2Mu@ z?=hOleJs7pTH4#XWuFWOTew#y%;g7M-@?4DJXa}EF4+{{omMxSEg(#s%~yrhG7n@= zYJy!yu~;@6i#o@*iV2PoGLdiVXj5l#j4-DxG2F48H5bFssuGRFeOFCz3@oMgcyV@0 za+>3`SQ`6on3FtQhci#(vXkYVD=eu;S;dxPW4zir6I@sUdlH6~U2HhmDh-31Z898l zvM)%H7dN9w$dQtbMCnb-+j?5M+uKaB31eQt)+x6D8Adc7vooy9ny?S>MGW}2km+j4 zXHd#z?=$Pi-0zcSUzU}%4Ab5LrGk`Bxi}XC(fkC+un|0wWUob3wv*;qb|!ZzdkNjW zyeJfEwK83tR1g-l=14afek+;k9ih;&_RegkJrufFy=}j8fI*Q-FPh5a4Z})Avz%g2 zs4{u_p1X;IQ>jccq$e(G>FiwYc1aaUxu2Hq*3MpTII<;%(~mnkovW3)TidvPp_~1B zh#i*gIU>qUa24-%GD7X`+v~&W@dOQ9zU=l7ST$e&lAe9M`aLZY!TjnyC@Q zuM+U1i(q%}NST1QZ>n-6e1uJ~`D`>2PZ^1{m9bBp7IP$HNZc58{1{onm&Ffb8rc;4 ztMZv#I3M-N;0p1NEaJ=JPbEzDsKpajJ{8a8lftzl2pX)$ zn7V|Eg%PBVN{tf5h9JX4PcMR|CEsSX=OVlu0UqX-Mk|wyMIwoG3~^=4DpyL`D{SF~ zi!WGk$%QRf&RMW{-W4tL=Ug#=-sQA22HX_=*W}m>*Q>;xJ2BJ-UX_QAU%2nZl#rEd0fdo$u38+6Isp!M3UibCJ&QU zms))E)T)ahHF^XxlDMr?yZ|rOnrZKeM2iZXpkyn@qFMOh@;SP*TnH$eDGQ;h7zpt- z%D!pm!Z>ODELU#kQ${MnHB*^v+L0Ecapqs{T23REWdm8Bt6jPECzY~UHeGgB9zCOY zZ|WkoztkfEol#Z!>F%;jE~M>bM8jgva10iye2H`RYY_*}FL5`hri&h>_}qk=k6YNp zqnxXiy=AIxEB9b$ARMip>`^^g$gFHp+7bt`GG<%P>K62)LcYCoC26O*bcJo<@nn>3 zWHhqsw01y8DM;BH(VZb%?UNIZFj+z~%xEMXHPhUqK{!h^bw_TLxqp23frIP6O#j(}T34AFq9A!9Q&N{Zq1)O1fHNDytMjkVKDHsU@ zJ)3QmdAX)B=DFs=({$-fcehpOar9T#hB{bZMd{}JbUvTRg)?DxA7(sZ%ZCf+gukuH zvS$GipT|EsJK|6=TCqr_F{bP`2<{o=R)9Rmsnn%Qq@*~d;(cv#M{dSht3}UGvSlJk zt3|?WU8yn#N5%UyVsJ$7NHMtGB++T_FEzLUl)E5G6NP*vljDv7E}P15F>B75DA;Na zqIbA{PbG8H^stSx*;v9zaU%gj&gAwNuks;!<)6IWgRR?nndRlJOgLp`?I#<}UE*cpq{^hiX_@UKw8N;7q|yF@f@u=6?>&a$LG zda`9(F=*LnJd>awqGrc9+U%JzGX%D`N7=fec5b!H41aYC8@LKsP}HGeliMdPv`QB0 z!%@q=sH2$SqFg_+c|cp49-U{F#ocXr210Io&yO(GIMR7QdHn2pG2}XPkyK&0j1eHQV8jY`wm=98sg#kCmq^K*wmoJ>_#*kjz^chxja$?1 zZgscEcpik6AAtprz%#HK@dSvKC0>B<#3j43Dzh`Y+IC6hs&-{YMn*=QIOjj-{HNbO zf>@#<1W|%_Byp1=UAO71jOYSoMr6oWf%c~-h}$?bP~H`~X;cc^mwn{dZ=4=68)Fet z2_}HeR;!$l+DM$~QIv2_B=&4wV&0O($BDK>{c}R93b}EniSknRx;V~B7GN>;57iF6 z(m4@iH5~sEKT~EGiP zR4mabCz#8Pu~jiU9ju}S8}O%d;rk(Pp46rk zrJ_lzs<~iUx_H1Ft&FB<(Hg6*HS~+@d!_=Dz-<78BEfD@sLUwIv7@vCdBlFod4sS3 zOyBP^bdbw$4+T+#CI~1i=L0_4#KVI!R_nPqO8G2T3Dr^R`4>+=-@Cv6<>LoWwz9{H z+|)Ih%t?jZ&9i{QBpJzU1+p$DbqDyeOYqc~eVL$~q`bubDxitwp*cR=w_jBJhxV;7 zSy)rZr&W?bR@RzDm_q-YMs7a{Gs1$es_0Wo?7w(s(~kfgk~~sG_(5SV_E%?95=g3x zh+T@|)BFLP6vnWFbjJuQ7|9B>B_lL4f~}Rv)F?cfk!GE#W0Q(iws+cJUykfUrV$M* z?$jua3DY*oN&sh`?EKRqfiu+qs4%F}O)4i1>^^39z(j~fRsMv3@3A3v1Fce-FsyFm z6uQpAxzfbp9v;9;550zE&`P0wqp%2poF*qHn1nnFlB%2s50X!o9v@i>cazZcfs)o~ znZnm!=O&T@AnZ#({Tu{=Gwg1wd>MOnWP7^IJKvjYyPh6<9e(HYJyNrMe$b`X7QOCS zIy`4+Tq#phASZwZ$~sscli7L7W6R^?KHY@B@#{32H5p9nfDQlS_SnmngWI`h5}i;5IwE|wwQIFh*#22kdfY4`G0zz*N1I+ z^!g;f_we(*$1kLUK&i_d;D9%^a57y6Np;D#IXt3q<{e66M&f7!spv+V>oi0}Gr%U& z3>2EHeLgA*M)Z!%3v1|~gN>}svQ0T)&dYCFOc)6|$9J4X=n19DauiFa`hT*X1o8vC zC=f-&&=OXvsho2AN!SF$6hJ3 zp1*<0Zg3j_5aL*!i-~yl{62~~{f-1lBA={5v2E}L1erXfFWcQ}k^s%4pP=M} zihSl`a%AtOD=tId_Q^6XqTH@8*X{`W*u;m@Gcl|q;G)OE471Ey1chb)$Nc%mY32`wt}mECDiU@4fFe=fi3JCGpen4chzd>+ ztMKIJ>B`!xI@`+X%=0~5y?y@0dI8oGNml?b5n==_loGIgVqxKVqVlBq^ZHBmB|j{H_!ILX~T z+|a${QVbi{L5UC{-H^XsFQ4(Zv~GJkYl=8I5@XTSR6`)Nh1@ysn-*EMqsc2YVHDmX zyQ&fMKRoAYGC6OQzmaBBl$7WAlTg7LV`J2)^c}1`tvy3X1(FU09H^x2}9SOG- z5rcvsP`JRZwi2#Gh21GVNkR1-Ww5+suuQTd+zB(Mfrb#|{Pg(k{yrIzQ^0D~H>wq{-*j@7)+A8V|c`EeomIv1XI210GT7k>vVAxJE-Z-VV4oVX@ z1&|;5*=*%5%J}&$?Tu1VjBT7Av!grVYq zc^7^I6G81_h>p)P7mLiyOPN``^@ZVPbB^-1kc-G4mSMLn8U8oEdP1A#?1?N>Q+6 z#3GZDojhhlTTzga5ND+!S_AdkikC?<(J!H)Zp~{T_PXLw3*6X87EcP-Jo_hR6>JQE z_d|Q`24!rc8>J$}Iwj}_N8ZpWJ@JGL$MdhX&^Sca*)E1-_<$OgKjeOoX^t;Tewcielv2%UNBX|zc-3)vTH6T4eaBK{qam!V=Kq6b2ga8dhP;syLJA0U zIx*!5F3odGApK>d0U&Zq$!f#X;mjn2t^&o!|@|N2JcQYll4g_~T)@ z(sYfGO?I$uoOYSFkS!ZiTS%N5Nae+#TMQ|Ab@HlC-{36aMmBi751RD;i${( zvhUu4@;l%)Mj`+Y*JvW>po2{?Y1}MDtLuUmuNI7cuo1|OJ_Qe08NuC+S37a5t9Oy~ zioxhxS0HV@h(`%2V5o3zIgKD;r&qBM$9*oE=cZOAuzGu zj4&U&IXu*uox+pd35w}8TIfu>?Hiieht34rZh_gCyVTL1w^YQTupEQ4`){-Nbz%&u zLqo7+g>!(?KwfA~hcbkHeJFUq-sp4_L9Mw)6MnSE0xGVtfl_DzM&``K)JZZ_#a%Ob z!EjO+>6j2=X}{UhnrBQ(oFv3KySC1z#| zLHv%k0Q-E=Rs^Ps3k5|qEerg=Di(zlCoNTM{T2WuloG;m39^xigm#E3 z7Vz204tC4xvJnK(9MF)~{4*iHUxHeiP`%7yn?#Z}QB0+rmf%d{ioGJ75%+)Ef(i>{jfZ}1B^{rfnbqr~T7*~j;7G6q zQl>!Y#9_;0Ca{zOyf7IMeT;8H1+6_cge@aBBoItdJdONUuWS(>tN}O4xuJ|75tFE5 z?5ybhQWQ1H!WJ=fyLO>Y@`CB${~PVYbQ8g|zIzkFR%Z2%jKpLw0*G>*CW5{;+6(5> z<u zJDgzB)YW|wh}f#gYKRiq3<$M%Gk=$u$C`qHlt~~EJi*1`^KQKLGPUl9t(RdJE)*Uu z)rb;^cNJ)$GaEn5bv7Vn4AWJK1DyzViIkuA{31(98={m7KAAE$PK;#hv15{fgv-O` z91+Ff?84!@x6a13{Y2w|hKfQUU#=jvW~?-rBzV<+&(s*lOc!<|C|4*TSNI)svH|7e ze0Odj#GQ;aFiEr;oTa40<_aEGv~xHcG~ubPR@YU7mPpsrgp=U}Oe5f-u=CY5nK7#f z2PJGdL_|T9A%&Z(6}d88xm<>=d1(2~6V0&rx`_E9anuO|@olDC@Pd>^_g*L}2SH#W z2?B|Rbv$^Xt|2GG5MQT>py>|X+sxq!y2Uk`2x{t36Ws_SVmrUSaruYs1;LOVgbFkc zQdt89gkNgY`_*M5z_pPNo4j5cd`&Pmp%X&j)9DxkRYHp48kQ`VE4*%Sth|3D=ltXr z@5SOj|B^r4>xcgH$9&3hKj;1azqc0e|Gii|{DuFKkI($qpYbWj{ebtKo3|Ht{zQ1{6@ms!!S2*q#|3Q})a@^wAw`t(UB9ZU@CBMn*H@w4f z#vk{0`-}T09QQl^l>SBGH`;p_zWd+gcew`FJPAL&<2bI~z2q2qJ>V_(8eae8xc7G! xi=Xlz$21`KA-DgSx4j2G<@Jxf8;if#Z|^s{}9?`zGPJB$Byf?*gc^%qhHmE4sN&Q<4g?R&ppcD~A0Q8hwk zstgt3xs;txP5FPF-|`<0{*ObGUxw<#MgFB+^^zz2rOAJ;{{Lu`Qu1%f^Hlk>{C=5o z{vREr^nd5}kG{sUPbuSn1XU04FL+7&%UW-}R(_uNr^|V0D)pUf_Z%-B!cX}Z_!_t4 zMgRQuPYV2#0{^7IKPm7}3jBYP0_M5~!_2dkJ2zs)ABre@ZX^`%A5l4;QnS^T$8%h{ zns?@`k!xbX>~gOB+lFy0Hu?+|8&#oVBOg$)5krhv{^tzyEK4PZC6#R%YU!g&?JuwU z_xRo6P(f3!vcuN{Fo<4fIY>ef=X;q-M!YkaBOMBO&SEVe>j@XbmZPHB^JN^4atcU1`bhwX@h?n?Rd zP#A*t%rib$euYZp*F)P?JTr{gu=-Fe|Fg6dScF6dV0p zVCDk5J{(V53s0S=;(gag;1KrvuS=&M&w2&- z>RNay176C2f4T|(m|1Ux5+&f$cU2^o^HjvlUKL7Atq7Sp-wY+D6@_Bi^^sWCZzHij zZ$x7D2N65VV$6&;pYdi#3};p|{9GThbE1Yb`!M5s!{>FY;iJv)yjz((ELXcKdBnAz z1UK;Z<-)n8m#WipVHF>QF5uq_Sl}_zi1^PN4$@B~Hp0Jmt%id#9>0D0T;0AI*paOV z-G~KEkl#vV*A`hF_ruSUQ+pwG=Ud7RTPoF;8?+DRZlRlQskpL2@oR?}b~s(x$#mr= z!@kUFIjcJ;&!FjP2bJL%~3s`Xv4>Lq?h4F&@stqpo_{6gR8VNg7&A>VKMZK9gZkB zl&fx0^b--jYv@&A4S|n~Ur*#)uRHs;s(6n`FWa(SHz!+B+frdCl2;VJ_4$z0ljn|= zhn}-ct>b)pz3zn^0b+4IucZU*r zFCqt7${w4gykrAoeGJ+8IlLrt;Ll0G?*%UNVV8wJac}*|w5MLHocT2>o)OVF!6UDm z>nlTv^;<)BvQjx|jmjxFpq#4xDz-La#@6i%^k<D7U1%n(|W0la!Yk zv2K)yDep#kSjx*NPf}h=d9@MCq}-%DlX6qaODM0QyqNM@Bi5br5arz|4@vnL${Q%p zqrAz8^`P9Kya(lmlxI=iO1VXOn-S|txuU!$<*F^@h6>LR-bfU;nI?QdUDMQjPzxV4 zzz5K@XKN@?+(daEZc<)Cc@5>ol-H`5MR^A07UdaIK8ErJ%JV4a zS%mU*$|L+vm+~yiTPe3FZ)0vLPoq3ad76|9tt@PBYl!i~2b4!CPoq34ol-I%sl!qwqPI*Ym$57rtc^>6W@B!rp|ur_yaHy~g!ZY)%M&GZY*8Kq!_w#EgypoDmy^A2aeYe3@?= ziN`D>epf~hcRn^b433W#D{sb?X8g7*4e^D|#@)9X;Icm2Fl|vPL=R+|8EClrhF{+r;l7Dz>iSRl(b*rLuHife(R= zqEGRma#OU%=Jrbc_UkftnjeE}&cXI}{Fm?hbSUl@_+_mEH<4GY;`cK5dBCmC!-ptT zLH*eQPk#U(^?;9hz(+mcqn_|lclf9~eAFF2>K@C#xjW_E1$T3u^?GbI|BqU)$9rSX zH9d>_YdTgYhjg;9yY;x>J2#0>kxVisgZ@=C;GyaG-}n?oAvcVlJGmlaPc1XtCDqE= zzg4+8)ynSs1?3!w8g^Ee+MI^mEJ%CbDa$h4oy17jw<)KrFJ(#U{>*URSgl+#9e zbEVEqs#5=O2hfqI_6`T@O_#cdEbnwS{2WHLD>_In&Q)lJOp@MmVzuD{BNf3FswSa9#fSW-Sn`9|BS09HBmQf=%0#coC$nBwZ z$`%^$+oznv>!na~m*r-DNn}^)BJJ4I} z40n1$dBAWlPw;HI^1i!9QLYlPdc(GPHgk%Sy6$%BeYjfLJ9zfyO!#7r(!Am(45xJs zv0@4O_^Gs5etlYO#BbALBi~4ijrt%hHrhy!<(|=vIEXmDBEw~lV&z;VSyPDBx+e-ps4uzFft#YqQ~RWsX88o?WcWvy&<@vO$?6E%FA%m*TT4U}b9G-@h0B>(=QW9cFdDKacW^PUWJ%I^X|0 z<>{Tuzd?ED`|oJ}7N5rrJsR|{g8Fh#|KN1IT>9^PPyb!+rT@<5^xx%P`tMv${~h;Y zpTfE?U&kbe`Z~tSgTATQ^+8|9LFfD;;`67NllqPr4B5z+Hg09Z2;H`-;VfUzlM~W9 zU5%Ia#3emMA9xY?K6;*7bKj<8@o((wv4&^j%f-02qu)_$7V-SreVJ=`=0@*VF}c6- zP=*(Iw9r00miDda`+bG>+^y|yTU*b9D6$aE>E$I`L$OCU5#MZ8vC*54#b+K$i>)TV zvzGsnn~wntyUp`iha$0cJlnwkWBfnP|Ip3HV#D~)r{3WS%H59)Mh+F)Y4GC++T0j1 zy~;!2{k|c6bih3k&J&x^Uy);OWhB&cW8){H``trhl)EWg*#+1wWIg^!q=#EYe3u5# zF2Dxy+l}l*!`v|wWb`rc0~<0Iab9g$bUte+uaB{ zKdKCK!-RIx^{(iP)s^kue(@LDw9c`YA@duywrd|^bsI45LQha{eFU2kGGc2jLv)V2 z484c15nBhoNuEU_?a;tznc4WUT{X5H|EHhMSyUl|;NS9~^$|R1#Bbb0{^))5V-(#t zQ6)xHp|cw4{}42e06!a;Q=vP!reMC)@QGVisp5;EUtW~96R9tA!dNRSsavJovI#3}YUZ%#{xZ0Jy) zmYNrP7kDP~)tYjdkA1;>^a}7`uJGZy;*n<9%R(pM5n?{5*98yp{jdS2#Ur1&VIIoJ z0Y7M^X<9C`dTE+1utEt7nnv+2(}qK%P2hJ(C9DFUZ=j)DH9@VZ5Sl{AvV0X^Ca|(q ze2Jxf_*8poYe$C%W0bk^>$NPhK9M?7F7lD8f2#fx^k=3`)BPo^*(!F|A+_eNh>?iS zQ?bM*+F~=)mZ~)gaEz{3vH9RTpK@!niY4V)Bjr2Qnxxd-uVTpX8u&61C3jaP_=!wJ zj5Sp${3=z;z1F*b4^Eo@l9d`Kf6VyYORRTpdjFa~Eqw!hP+`o>c?!L26n)+tVyO2N zK7Zhs#)eg(iylw~;UVPe!mr!OF!`ijVbRxtANzQ0D9Z>;|$u+KxPV zJlE&yJm6-=b;_KZ#7RD!x;-wxZEK9OZ*OQXuv9rXwa0JBv&84`5)=9TJ}G%h?H}s< zy5GlgiDQNiBbHhGnYl^96I*q5V5>&^wkqj}9|?ANR|^ zm*0yopUYh3GFQ3ykVEk02jj~R#+M(AFFzPxelX>ODIXlmT{Sp1`l&O`bBPZ|7vn=E z(Q^$dG1@ZB5yeJgcoN)K;Y;G9^ogjO&ilJJ3Q7n5nEHPr-`u01Ho6P=8-dUBL~rUp34H2*ZkTPgUIl!9XO=KWuL3`_p!AvV z0%s@iGYe|>Fkh_#KeNDk6@Dta0r;5(Z4cK|CkObM1!WJv1UF z3u@|n^7~cb^E;Ei8U_MCqhQS2=P<6Vz|Sa1-g+^-dol1c3TmJH8g+gI{EUL?qjP!w zL*Qo=lw7zBUe5x4MnS{pHrQ6vEZ}Dptxy@Y4#a z*EjLJ5Af3pN?#=Y$QlFuw1P2b_2Kyv;8TC|aA>sw_-O@s14aYW27X#W*{FX5pS{4R z&IMC|`CH&e3d%A{8T%OEM+&lT0MFVV1D_oKa~06)LEuLU#(bB#DA@-5NI~1PtLgV{ z;71Bd`-6Y&wZM-QRDbn3_;oYzBLyWlHUhst@WTad5B?VUtN?zvz*^o+Uo(LpE*R6} zBVbMkez>6K2FX=NfgdhtSlbUep8@=EL0Q2d@UH_tzb7%ShFgJ8ohQ$y?XQ3zD##iL z|BU$+@IwW)yDovwYk`kmcm%!BwifuIg0j)qQHOjyzmxaf%D6@YKU7d!a~pNW0-xvG z=7U=W@X2p9-b=r^z$c!1_I_Zt10Nmq?`s+FOTbqJHAkO;<`)596(nzFj`HpUK5LFo z4UCQaZNJ#4H~Pg!*Y}GJyLlk7!vNMz&Wz=MFfcaaje%xE9=<@unTdumvi5YQIU$?% zC+@dKbUY$!II@02EM`dj<;`4&k9b)hlQw2?so!>M8S?hq{yv3pFbq$c>Cr~?YA1v zA80@7n_0)(XN5ZTAM)O#{jd+Rj<=sGYk{f$L*Coc{&V*6_SK!*Cqtg#KlHMG$J;k| zYQHt)>HcrdIo>|Y?9{*M{fYJ?p6Z1ERI^k6rqfFQLstzv-o9G5_x>pD9_Z)OF==+{ z-wbH4;pp}wSM`_nDV~UpsPAt#&0(IOAafURJ z8eUtI;We}=4}U}QQ1si&v1(asDN%OGxysFY&xcjA7yi5GIINPJ;H94&hgJ5j;cVSv zICJ+I-XX3Nnw4X%;~!o~BQBVFopQ4`Xx??FK25G*x?aDQdhXO^tY_b*^96FB$S*q6 z+uCe+b9YI8g5UdyiDnZw?UegoUM2UHnBvaufdz%1fI|egwRh1b8)r*HRxZb2xG}alO*`H7_&VrQo-Zd`1p& z!tAB+|69yoMQ9Rv^)NIN-1igzxQ5&N z7V@hfg4>}0cl`S~?z2|DkuS`|mL9WkzS9z8E#!vO`+D{H{rgGiYmlQxVbjrBlhQ0Se!(RMd<=pg^;Wg6MB{$Qu!*IU+1Lcjg4eubZ zx7hF#^Obg+wD0Mp9Z+8M2yq?wy8DP3OvBxQu38Dc^y5srjecht_Db*#?!9rFz;&*2 z?&P|qMZN9KP2L~>n6(SL7bduch0WhS{Tq4jKNdjvQ|0iEfuWCZcr0s7mZ-08cNJ@^8{ zyKb=I6r)e4UuW2ZH>lLTw{5HPZtH6}?OeCf#>(O!*R~<`&=P)4CyrH+((&&*g}}8D zS)F&3>pbYK`MQVC*Yt-Rx(^~(`<_$ocJOw`=v<&P0lwZ2-Yz^ma|->#!(Xus@52&s z=lUGE!N^qp;p@ts(3rj-TnAr&NV`qInd;{hp_Qibr3K_&KCt!guM7{_JC?wM@SM;D zK9F3b_vVMl?hK)KZ_fnRuk@oo`hBi9GC4)y^ziO_Q;)&DJRjQZ(|y=enzcMSEph73 zgx<5XJf`lQEztg!Sy~>Qakn6c;C|1C%2^OK+-dMhZ}>#;z8pTW;S*ZlolzTtg$I=Boqyam&NQ`Ey-fLy}s z?)0t6nQ`ui8Zzird$|6Al@f2`^4aqoQvdHn8G;LeqC2`n#hge!6q@V76Q zPeVWOW(+C0OkBD-6dU7o;&!V@x zYnzx{M_wL!FNNOwgh!#b3%zHfd$u0p9(udbJGl26F$KT-MJdJ%n5#`a%SxlUKr@y z(1<^gA$oIwvo*_b4sAugvdK?wqr9TKZ{O&r=`8wrJD}BWa#mje_al0a-JREyJK6|* z|K4l-59aQua*l9?4x$Gg_BA-&(DhTlg--c#pi_RqI>J>xoC$$WnK;ix=K3bY?ljIe z?dcE0hyS6R>rDKXNT9>_!{eVQbjmlQx*{E*F|3-`CmToh|DrjNyPXhe79?!iHx(tGr3SCkKn| z+y<{Fvw&lCC(o??AG>)tee8!$+gMM*w{Z)wJw7aV*KAcg0)Edv}Flj;a{oer=TD{s`Up#~(qT68yUsaNKKnmn=8jYrZV@ zn(Kx5fQJot@A=?-kn07?d+C_r^tc4u*53a_y zn6n3bx6}3l-PXB;`#r3W-4`O>yR4VoOMmvBfz|9i@~G$a z*lF0)Y{MRO5PH0;?5iDc*+H9^8F!;$U%iI)BNO}g&Hmn{jfRt8>`m9>CvU{B*oaPQo6qv4ikVuv2E9rS^7_-*Jm58C_zUaH7+qR5sdaNw5} z`!pPT54LkL{POPeJ`Q_k8SY~ECAfDkIi#FpTMh44u9vI;7I;NBV?S%~)!_3i^oqn* zCGhzm_`LKPKej4?rw5^nf_pE4ui9|C;g$V@YZ>$Afm2bY$J&BNoMo3Fdp5Gi8lyX9 zC$Nyc_#MD1<9;@?KCx-1^>bGjYKz9cT7&mn>ngh|$NL_C4aeL#)LZS?*F~cW8Yddk=HC zzY*Cg%C-j~zaxxn_X=cx&I;CJD{S`__C79uPkGlaN9R`bv1hPv;LLZFo0*}Ux6d(n zmgRn(I*Z>__T3?3#-9q@Z1=UHhCT3ra&G)3dV2|a3;(IH3Y-@i_A3`br%GkN@+F>g zz2b}5oGPvtNV#&tOAIID9rV})^e^&?{Q>8JUKIZzdQ7?Z_JB@RSn4%H!;gIbV;cTRS_HjQ-(UO@CyXA8yn@d{3?MSE zeU_gw$20Jef;Py!yZH7F7*4lu8*Y#8*yU9@DIY-l`BCBJ3e7hgVch7$E2=KD_68rZJVD}q`8}^JbdJOjN z^OSSxx!j-c$5d6!f!O?>_Yuo|Xt+I*@fpZ?KVf=<_Od-wNtJ z4t>N{R}Ao;r%lyP!?|}U{CWd1(PKI$a<~7Syv3EoS=T_1X~fkJK|}O%aPM@x9@$SP zej75tdk%j3@Ji^zyoRn4+0XFq3IP{CW;-@xB{oBF-iysxj?GBnyce6X9Gel`J1?V$ z+o^k$>!lYFcZ1tq#Fh8##Lx6)U+X1g-yRH4&u$NN8Fp+iI0W~eSq9GEJ5lxno(5L) zP-Gw2`*tAv+rjViejaS=T<&Kw&eb|U<#F$A$`z1Bya z^HZXa#NMwIdr!WKd+(kfVDG_M+xuzIM%()UCtn}gE5$E@clS0!C;TGl;!NC6eh7WE z9KR^IcV7N4=(GAvi**ZRmF4D8aMz;DnEeWYKR9s}oGhM2=wsn#>~X#A zmfVW&UaWNzHnOkSb!71j`x^B0{{85HioW(>@$)Oruz!ahzUfkYf%?97|A(;o#z6PV zJCN}!4fjgy`aon?eEd8EA0Bz{djNh;BW_tHFnNZ&FMCV5s)a$Y=uZ!wAeFlVy=0{FzN?k?c3d`;&dy{h#(W_5RA?=QvoShOGi zp+9lw$MD<{Wl#Siboreh>n59+=P2>-W5f+b1H5ff!?`a@`}f+`w{C`C@$Z*m>uKxT ziRIAnb`8t9=iAVXxeVg`PBuQ^7222N6L-UtrBBm$vmXaumrgs2erGX8_&2zBChcV3 zV8jqR;Y=EVov`>PXK>Fn?D)5UgYD8|_yzf@tBAYNB^v*S(cAyQn7B8;2R@8L$MD^t z#chVOz$7LtN|!YbKM$RUK7$XbFZo4R@{4ayq0i|$zvxPSF}U}>vJV|rf^W|iJ?5lM z=O0?!1>ZN%M9xze*K5wSD@uQF~WdOIihFL zW7tz0d%6$ZGi4Wa!k)&Vv*?~F*FmQZ=pO&x+tL6&__#;8ZiyY&J>m=P^liMad!UoV z`QV^^A^dvRMa~7MbYxNVPvgukem(JNnvavf>go&G=pMmA;y0bINB5-ey>U~2T8YuR?c79&1wA>LnUxUc3C-@dNncK6j0hAlDsjr37m0$&^^Uf*qaFT<}h z#YIuu?35wgu8T>?F zy#-GwcTXSU@sD&oP7VQG@rqx!s>+Z&g1dLEpHE2cWPPSDb&oJ_W4a!k zZo%fy1gD}j@2=kbM&6ph$pt43YbUV4DacpZJ7xoGeMkPv8HY|e$QVVpNRCObZy?wB zBla%x^Q?bKZqb(YujQ9(IL@T&!0AEYAol{dTN(P~I&cEVgEIvu*87A`MnEUp@5-Y+ zx&@tP?`~4|!}vAVpG`aXb9bp>KU{+y@b8@$_9Mf2hVy5xldnh5kKq40`q_bQLEpLP zyIDKH0eih1eJ40b{;YFuE^()R=4`ZAVL0qbwlE$DNtTex=UmRaOJ zTi8of(cj*A2Y9W(A88?8C+40q7rt1caZ8M>&$f4ek1;=_#|-}ruz!y%KeCLy0OWzl zv)Ml)PlSxxU(Yw}KKqEb*BbU~*xD8EV3&!>=RCpv2*Z5{S$^j+bktJA8J8fge!+0Y zUj+>>ME?xeGA;9{{qReCId;Yq??f8mU0XRl1{qFxykTcp#D`hPB6ei<+wkrf!|mUM z9FG*6Fo5`$J_H_X{rRi%NM5$7Yz%lCroLiANpe_(?{70;1p zu3j2>vz>z&!!bXHw&z0H?qMv?BReg?ZzK=$1Y>9r*5=<9d5${K9CR}Qc^{Fe3Z?uVi6x6$kW8N}ZIP0si0TIcw&H}h=&0AB%n6Dk1@u{X%^yid8#LnnMF z@*M53H`A~;tY-y{YCCt1&)IYr|y>)E!Ay$SBU=OV0U;Zq*u`W&(tWsKtM-nALM z5ZGnyzaYu-N5!*nmHaJO?-diyWX$4$v!w=8^*x zy$4Inmt9{wV z=GkJGmm|yQd3QH<`Jq24_RsY5?KC;_K7S-uzXF?`N37k7{C?eVk!Abg1Iqcl_P(V3J&CP-nZ_ndo}jXl@oo@#7QeZ_H-D|NcMl}y`NWT@ zcN4!p^eS=x7sdA;DCIh~-u<}p#O^FS-*B(!!yJ92a}mVq$o?x@_8oJa&X3qLX!C3O zN=q2_z3K3NKk^_)q2IOSF}{Et?Dlgj_~6bsmuDN5_irw_-KWv@eSJCBcH;ut?b7YM z%4TgRM2=mN<56b}@W!Lp=P!ZYalL+|>CO6)mSf?Atr6e_a?HK+!;S3M{M-O}?rcMj zkMIot)Jf}(-l_m_U&@Sx65Kr^L^c->C${$ zw+O7xx<$ij#BKrSC|A)fY1e5VTh`QV_N8dMto39kyR3EO33i!h&Ny)FYL_Fv4QxSA zjbKa%(3xTbpj-b7;Ny{j?!OMcfX{+^=Y>PaF!9I7Tqon7M2GW_+*s)D9i@z?M$^XL zU5lSu;==)Vdv`VbSf=5431U?l&kN7_Hh%I8*zhL*i(y|$EKI)4zVaes;z@@6JACUc(3bh;iScZD5z*xmd^bQpdUUQl8f+@2i&*AKy;w z-3J^#(zyk9_xa%Vik}xtxYWG}orEm^8*$AK*Ra3nOk!f}O#Dt_@h{WvH9w!UU;((b z0E_te#TLW6XA*JundnUF9VS7W@X$BGy*DXpc(?U4yj!?}k8d{{f!U0YHw!rHh#%qY>6?Hv)rYe+8@!eP zXRZ$?^mTG`tNM97_a=GZ#dX`$?BD3kx<`?v_j4=&hO9e3xF2}iiHUa-M;094TecnE zly&Dfr=Y*5vbW-GV&rMq7_J?A%d*KOq!Hua1YSSUYvk_qXR+_s=zS)#uI^4>N!*VA z$~%5u@)zipzTkvTx@|Bxp)Xkr#}-?1m0W<{KelY24{KL5_>DadYu7B^QNcfucMAp1 zw&ARWGqw-83f-}tUfR?6L9N*I+2j(|2RVt&;55z8CFq>QQgE85a|w=#-Q<}w>1FZ~ zQLfv7LoQ)xeOU4Up7k`goVfi#^oq_U>_T5%;QK7-YIpl}*oO_i&%(X;+#%=$E(f`a z&jJj`1gC|0$R%-a(;e7`6+T|O?gZ{i4VM_Xue+TX*}b3md5XMmIndqlU2O4#$oTEb z-HmKMgb&KPlD5UaI~SXa3?uLM?^7}I9DWZ)X5K`eZ@}*%E}1l)7`6#H9%r~$e~Ga+ zu}*vu^RSC6c`nM_J)cKjc0m6&baP+r$4P$8ORQlp$N=K+KNIgtJo_)isK3|oY~tJs z$`5MT?w%jx*LTBDxVfLebM9S3uBm>2J7o~--^W->K^I+pA#w8_-PX(_wk8)YeY#ga z;rGott>mrUL7%{LS5yB>)PGgichZ(Y%k9*~=5rOAy4!8=I_THkM)Hr(0QYCg9Xx|I^}W!Cv0uHMe#p7Vnt9~cnm*no$iyAHiP7KX z8GA`bSA?C&R(@{+Rt#9^6b)+!u$)e?;=rQc0JitiF6G?;UE8@5@AIxX{|(6UA#?(= zJP29de+-;}J9w%Or*S7ZEdkD4AE*21i)Y>?$lV>yf|K%k>;EO?K~{&pJDBvNAOX0js_O=ll8itd%*8Pd|BE~ zJj^|Ox{`Sh?!CrRd~@QecCO@K1%}geCvu$4I_7L*59D|s_)Xi4o|&fgsK#j;a@=b+#xVpHqTN@;&C?V*d->wBU3Md+5nfnL7}n*Rjd;@^AQ zp7C{5JJ)STpmPp6BXC;C9vJ*ocWN1URR?&H-|kC(Tj1`(zjhzd`)(5F7z6DcilpZK2;9zm{;K0dkV1C(DL0EeE%QZ?LEA6H}r#n zdK?R8(e`@wVr;|*qrS*&KYTRmOSvsF+mHN=+((|*V|Ok=zu&?AC0FxotGr)eip`Wb z*4}Y0dl%mGVeMhwm*YRAVC`YvmlNX$_s%8gfnzTl-tAm3xlr%1VV@2A*^p88o!HsL zccu8wQ_0t`@5Gt)5;~)S`-h>yf3Tl{d)7SVnKR*S-r@fh*M00ydr|h&2RI3=80}kt z^$g=fkMwgiPW~Pb^hm!oK7H8p;k*RycWfco#uc3WJsu6L;WQgIGHb6OheE&ho}Vjs z#g)K$iTw=l$)1PMk>3Lj_fdF?XU-*OGrkwOj^?#ZX ze_Ph12FSX!+iztM3+H23!9N-C<@a~PkW=LMov#|M*xw(KqyEDW3|D;X?DyDrv5B#b z1<#4d**wFWuv_v{&;U5Q&u6T|{k&EK*BKWf*ZJ`65_D@0y06ubg)7(TypR)_h9A)r zSpk3cf4IFrg?^Gh`7%Bqek?wk_|`|G;p%&1U`OCTRVWU>*2bWiP(Q(C-$=+V$R*0&AfuV9K5jnLc_UsA$I;Q?%{>yPw4!e+&dq^ zx09bCE*p(3bCq1dT|@bQ6S&|rh5vp(@ngIh&oa;S_x4#jKDB4yv-Sh0;NE#*CAsc% zfw!D7AuwkZh2$!+wY_5~cmOkgJ$Z}m=$6kPhqHSox@C1IIN)@2C^^oB_=E}mcW};{ z=mPQ(*=zAB_&xQf;B^JL8gdd1*z&21iOX;0ogDw(o6yetIK)I-57GZC?2$CUMScsM z7&Z-^(#m+QL8tU_*lYNaa&4aJu^VzMU&pfYTlR-VfQgGoHD-bp`O=!Z%yS-i~^G)x1Tn++Ey?j~iwW zR1>rsyaQQyt!lv%qs}iG%2Dp2< zU(7vY!N&G;Um?GRjrFc&|5si`Uwa0&S#ny;pF0EF+W(J%%#Ol`M$Zs`y1zRI|M^e8 z|9n-R;SL~Xh+4<(?#q`#lPj2Wa#$tgt{T=MQ`p;=_j3I*^oK656oB(`y(b_syolTt z_ONoD>~|UHReeN^mJQ7h;ZyV>M>Q6jHTyK%whViLY;WC$Ek*A(+pO~*RQ~>7haA%m z-A48jySuOhT>W>Kkke(z>Ar3F8OW)NoJt(3>#b*xaW=Y_HZC%{Zwu>pV}V7VEy(1A zx!ltySBcf#9dnRL<~M#PvGX&~^J;uX=26GZD`v?Gp;qr;$HSZc#La`4`=H>#^o}uTl{fx z@7?z)|AX9z4&6=_&*@|4*z%MF6J(V&8DC024SOjfUCoPU&f(*xj4Qt za~|9~FGaDlTNo?XOWqCOAs0#Hy}1-PHQ+P9T{nA4>f(9cflH*?RNE+yub zd-k;Gcki|yeSpbFnA6iD5;#=2=EAd&>r!BP#|c zMivb=&o%}p&aNM1j;a`hju~X0V+=~1Q-3Ds4h)fZ^;7@)d@j!ak@LCa?57-0&hi@f zpTYb5yvNMh#=+SOvD_hsUDno9&hU~mQ{yw&aYhMetZ<$kxUe^dvu%eJaTc8+=QbDu z!#ry|&%(U_nU1d!R{P5>eoxkC2$=Z`^|Pf<%9%rIoom&B1F$)F=Tz`~+!AX}b#{Us zQE91j=Hka1IM-`FV;ZmG57lUROLO&k$Y=Y{!|+8d=gL%5XFlawjB%};d)3`;`YE(F zRJ^wpvYW0|cBz#ai>y+18|R2xR@xeVyWw2w)ve_tKX=Gk7PXPe5;-_ zMmZm>PUu;Fw-;W{xE3=$&JsD{Y+7ij&m<9A%Nb0%ou*NFzQDif{k`{%c+_P`9e9&-q|>Dyyu@SUmHA`gq2i*JTT4DY4wrWR_$&<L|)nR`Q2Y>7eA8_`Tk8{Tv%SSlpJrWyL z!MW5AM6?VPXBqJbdJ`RpT!)sPCpxAs8BencW&Y$Wn)s|*~I)%A9?aiMAGV_ff9U9E>yVe}r&0Hl|CQZtW&YGI{q&c9L?@xQYb^RxhJU6^+XbT2 zv2VOX`BZQobnH_Ugl&b;G;0_2GEA)x%}()}+TR}ExtnZjcgi>uvcJ_QHb2Z+AVV0Nk3($K1K^y(qx|D|hSgW-6w9q@|qA2}f9g1sv>vA6kBA?UA#U1(w39-$RysiS*S^HFz>;A7T=1Ny@QUFkpEhdXBVX6di8VVzv~< zLbqC+J7UFhziHX&zPxGMGhgO;GQRRcYy#)eR0|D?2Z(-RpG0Ug_inP`e39SSDC9=Y z!STnmA zIh~v{4?O~%gFQaq*J(0l!>}XZ2!8wZ_|U2NBVrFU?g8Fzq=Ua7g$C&UdfF7K_&YUR z8GEEQgiKh-goR94=2?aXox=DXVf^{9dA1R@4I?6Q@>luP{`lYT7(aLf)t>&g-+~8bh5}K zG-MnVCNwmmA-iylu+YqxtK!BO=PBtqhDVWc=BQqH8XWa+@T}*10!2ok^CxQ?SzI6J zrgD9@TOeouxAbc|4gFq;hpo&L$CaX=j%C84gXfE#B);jSn>lCDw&n*mwQm2(b6)tH z&!%D^{f9qS{Hu4E3NCkBy|4!Xsw<-HLc74`yWGV_2S92F8|qQ)4Hzq)U+=A z>Hi+B%LjC&waWkdXW!_t|=(+}FtR6Y$Y~WtnANa#MQcrY`z9rJH^GQWxm2!e@eUcbtzYIVw9`Ea#~*UeR^nlMj9)415nm z`_}kEj2Aua#})6IdG+`QMZ`A-z6o{tK2>aJJy*s%l=0?rwx{4_Szi^KgxxT(8*-+< zpNBZ%+)?rS&0)oz#$N7^{eGQmxea|nj8UB$>%Yc^CIx0kP7Js@ALfs>JixR3C&5@h z(`PG48^ZqH1+TdaqtJo>yUA;i+Ymp_PI5l-s12{ipGynt{FnHpxtf1|L=LNmZ}(2; zd%|m)7t0?OJcJ(Fx8cl9|F`vTKAkTk?^wilFDm#h2>Bm;I-zMnt<-O56W;af7hlG6 zY-%nvh9BWY;b-AZZO8KAIpQ!kjL(?)Kq&BG6TssvS0mun!tIIT3W>GS;)}@7@!K3$ zZwjB`E2Ra#Qkvi^|A}Jw;z8`Dwucfoimw5Gglhe{%1`c(jp&Mh{40E~D3T4`8ul^X z{Rwhe*j>hzu6;@Hg}if#{oh^@v~F%{tPta`vO*|<=*N)LPPkl zUh`|q`!#h&qr3*k8(&G^gXtzhmAe{33d-A@vE z^``KJe@?DilA@s<__RL%m)|VBD>^}Zb)Q$0=i>jR;+LRb3Tl{1o90)6*8J0kKau?^q&ipjaZrud^L<zW$@*K&H+L`xa6UQ6zj9;1pBQf${`F294 zhNW|(@UfqBB{%Bxx+ncfzC3;}->yLhJnMGOzx2m$uFF*McV8fv`$C}}clRH*yZ7F! zTKaVN$Ni0snXVr1PgP6C#`m2t-<`?Bw!c2+j6^;<9y>4jY_D=Gv~EVf{Zt7(TKcEI zt8*+J_z>Uv_&gTi^S6^Y?N!jk=+2oE=Hu3h3_L1Um$#?a9xOLs-c}IWANUFa~c@C}}{sQqVGCxG; z*v0PK=^~p$bWYN>8s>-&4Rpk};vr(HVgtU+i)vk4mo7L{AcPgIRbeH#HTHN$=o8N+7F>W z_GOS;2>g-F$@^Ej$!gAxu2q{G$j2s$W%02#m)VEiP_+)(Ioz~|57wuZ%mJWFWCuF9>&+cm1wuoNnf|tZkcBHc1T{1TCovdZ?MG@qC zt2`$^TiM>SAbc#5$9eM#A3yBtKRpLpmdh`T4V5)j(J5=Y^i5yBkKd_J=@0v;b*T6O zB7=eab4Ges7@gXmlv^T)i|sAK_FiUcn3eL)O{F%cV{aE84eafhzs276_U2=6?+Rz8 z?5(_S?ml!rxI!Pk<3r9r!#t~j`y~EMvb`lO9lAh2?15hU^yyKkZC>(xY+lfR zsu0}{-*m|p!s{VyVhEcUVlH&vFt9gs-Q)JArjs4wIr_X%^k3Z?d0wDnsD|5p-xIqh zar9{4&Oygp@jr<>I_%!}I>oFR9ql8dP@67 zJ>s^z{(<)G?hbhrdieBS__x@%ljL+hyokKGBCo=49dc9NFSdF<&ybz+zbt?Fs@T;b zhFqNY;C`M!%;gM6~4?^ZH~a=jQ~xA7<+uL&LNT>2-gJnF4?7(SVn`?2&LP8&v$dO$e_Sm*=% zf95c~>ecvz(H^dRt6Fq4^C-C=&40(&nbQ*a7xT?j$IfPg!RKNBm8AP;}bmWql$rL?+gx*S<>Gp937Lw9aI|jelk+PL!UrDyU2oGtIE~6v@iSnJmlMmg;pH>ApM~S zQftPG|3-Kh2#*L1zJK)bsbnUl4+DA`GN#Soh#g)W@Q;pn#2zQs6_b}~Af{%`^xl2) z9knp)mtntt@x7vl`Br9_Z)ajtBgD+?FB)E~b6l|z$oIM`>~&I^yu+X1-A|zrcBER{ zCQZ}AP167IHpXe%G%PvZhF2>E=d53Titf5j$1QE_S4kEh(s4`E>U!3d7wWhr$=;P@ z)-O|WOKR-UCyl%edaj1=@Dj(N&lpRF-Gu(p`}0cu{dr+{x2?^D*VER>??`HYo)zrR zgEq21Ps*y<6O!6%*Qs61l6HC@5Bu|KkMGaZZCa1-&pQEzZkOs?!zg54g?{7>wH+*f zLgtw{?#SOTzLR5BVx(BUjJ1Jp7Bg1lUXQg|#u^FPvNv{CguRI9X!;|+#9lny$}NIiQAW1YH=b=L@WkGG3OrCl)AC5&}yv(#ZPqO@VGo!WGU5sMy&u|~rn zzc38G*_g_=$bQ6RSk`Zx)PBTB${#2iT$X@x61is`N z3ihGTB9+U##Iv@}tKH<6MV6ghHtyRgeu@pNKrj0K!2d|jP22zSqaD7Gb(+{j+X3^i z>}g8jCOi}H%RMPx5ju62_1Gxz4{{sC1JDoJv+vN%lU&zd*oUckvGDEx`&dsUJH>h@ z@vq<$BWFQ;Vz}wpDfSeL&X+N`{M(TX{3?7}O{2o^^KHZScpCdWbe%DZ^Eb$ql2h}2 zsPBn=lNh9HySm$mSHkh(1kxG4mPn##0DMlu%BD?DKEk4Dka@ z^t8?1snp!cy!y82bZawwcTL-#I$!sTtxP6=-zBGP3h!^367WdZI2T_C98!7fZko>X zq0QY^Bt<)&U+AD+;jh_O5D|Kc9u~bE8)2!<^lPq5?n$g`*duEu`dgiq`#86!nZ0j|uF`TaI{z7LSw5%U3`y)^+YdadCD^69LF z$@*7X=k+i4si1p(x)csg6dR_*ZSe)w5ps{js70nryc2&t*egWt5k7`Li#pb#;t$r4 z*By^OM(5cd$d<&4Nr~U0L3!f26kmwm)bp5EyjS=;{_7g{TUq$N{O(oT%MNS3 zkl|Xn!QM0SyM1bV*kNs3(*pc|CivTt*Hi0QPnyI=e!NvAdv*;s!W^YFM`XWRynl1Z zoWQtnx8i-8nM-iwd7%H6${LRkpM7G!t>>ybVue5tF1D>cS_Wf})$9>@WsbC7Vr)7m zXHGz;(2qGWkC719{0uQv5ZC$Nh2Pv}{?tvD%-8-~$@`1QHILH%TicjnZZfZ@_TOqh;CVw` z%75!LM^B{Yv9s;{A9;tww;L6m`5Ibv=%S9i;4ON+i_-#5-v1^!Hqnz>SBtJ>53G5X z@Fslm{hx`N4AEWj z9vgea2c>t?)r$41LbcTI?`HTnTWqA>13VNwr4RP(ZB9pDH+0&w=hvU3_spF1Tz#AV zPTF%8%gr<5p>Ud+C%S|+jtTSWM`9lKD35tmUp@9JJ98Vvo}Pv#g|koE52SIaD-}C) zDw@c+Te3H@ZYA=lkWcX&_~&_S=tfPW*s!1BAHN`Sa8mA$ISn7TtE`Wl5bN4jg}?WO zSd!n&YXy7#I@WSuOd!u@F@C$!`Mg(BI!AI%;1bxVTrS*PKjD^5)- zHHG=cBn4H|i3B_t*1{`s%6qrhGDcx_X?5m*$(y za3sYynrHBNG~d84%;{-(rF{Hp#y<{xPuf!|@}qfWV2W1?E#Vn6pLbdEh%tz1*{_W5 z6~5s;^|9G}XFN-Pn;|xABRW4qu1{dFxBXFUf!?o8j>?~RzE`^Ne}cc(p1@yEbmgzQ zfbR(Z~9 z@sH_O&FSd(ecvwsg?@YeWBM(h)wN%B^Jn*4KJXvYuezpdzvb6=>bD~v)cgALcvn@w z=li_xhx)eoU0dStjJ5bY<9&U|nguc;JfM9i_&~>S_=O$&_dA#6`2N&8)a%k8Ho!oJ z#eXnj3STPa|LT4V_y2AEmV=x2eLHaS``z*;{dQSPkeEmE<2oOTFX!*!A{Nr`)*13H zwqf#KU4r-C{+@U1B$oHalq;tV`!Uec@7KBK_mTdvw;la4{tE0;J#k9W-}R22_+9cX z75btN@?lD7G9LKQ_7PuZiQT%ayNDeQ{Kc8V7pXbo9lgNTmH)95zjTVB8(uth4BgNe z>k>m3|4PTuevairftB*Vh~a+S<-7MfPq(Epg+u2&hL2<6OVVCqC@Et<7~{k5ip*s% zSY4rf+s|d)K7K=U$g?&nXA}F1BdVP9DGI$!+|ME(F)+g3EB1e~7tDz~TIjVkr1EE) zH+@~!_G^iCcn|Ak9rIKrx67Vv{hfP1FY!)5tHZJUGt%VUBpcp!qxhkbdiI|_Dn4(> zj`ChE->tSw8Vrv!5Z3f;KIZaG1&Kc;-{a10QwtQWv^sR-fxO1Vjjs`oW~kUJ$oC%hODVb z9!%E!ZA70H6A!a@(vJbzALqy8A}4weKl&$8lR?{y|F*UxSmPuo zMLWJXKL$Oqk>6q`iX{%z_JO={rn_()*7K55S<{N(TP zJWV_sBgZIvj$*mrWWVptoIO&(y8sVx7Rf4ud?@EGus@J@5>ji^5?ivzg7+0)Fx>AC zP@6N(Aosyu-Hazg9{XPHGTzfnW6Z?U@lQ6&RmIEG$vczlXMG?+F2r3I`NZ9t&6-9N ze0zw!NLlQQh#X^F>{SJBW*^}FCM2+023jB68A2!ckTpT-0F$+bBx?=6KL3uFSq&di zPR`FfXR?Za__%48-6QW>XPU+7IuGb&{-`Lvt)@3H`T(O(;_S)nzg%e8$!^S5I=BIo zH4M87xH?WO%oRBxPfLH@P8lz*bC%q z=_mRB6n8Fgc9iA)pWV$SAp{6+fT*dA5+O)9nd_NzDAI%^5Nd#w1V~%j&73)NvMZb2 z_3SQ5EMhPOqGC;5YGb7}lyI?9|Ja~li)~bHw)__&-hG{M6{(jHVGN!JDPJWy=`z&<+Kfc$)IJW=sX5yXvJ^HTU8Q8tE zjz_M`d=UMm_d>sAK4`z}+;KZ?z&H|}CMmBv|7ZN%4E@_RqqFN)#(?-wj)6$dyMr?| zWS8>YI2kXU+#yKjc4L3mkLk+BT#nA?n9ChfE}^YExc6;uVxEcqjL1A^&svCG626Q6 zCCZ2{`}NnMS8$RR)ob>%$H3DZCue5Nk&d3O6E$o%F5AB|WZZT!?|(k8XVwe!@vPa% z!RK{#k!JO|;|^WX^-|XgWH8VDyrbuu=emO74Kun{oQl0jY<7)2*M*%>bmU*twc}jw z35-9EZB1-b;Wz&CpLgvq{V_KAO3;X(&+X|tPjpCL?CCm{Z~^XLl)gCJ(zSn;8$9*&4Bp2D2cMqNb^eLS%E^Dr3ti(cywKHk z9`Qf?^^S4AN8NMM!`OMT7Ng8 zd%-m>WfVH4k>5PcejoQCzVOh@V9rcMH=%#zJ5$blWbYB5BfarZ#r-w%FlZk%;MND5 zjxFd*bhZhtN{ure+1Tya;d>qH6Muj3I_~aY(6Qq!q$zXy{i!*9JAA=T8QX{vlX?vS*(--n);oT2}4J9OmJ zuZ3TN4$Zg)UadpBRrFw@J?2r+?^<6!gpMAzOs-{&c4M0+qAN3ZtfK6(%wEbe{%K^O z*oI-<>+E{)0c?4#k~0H%vFkdx>(ap)Z?xawT<3W?tCDo2uSC~xY8W>PBmPnc=@;9% zoBX2sH=|8c+E#eo9jC7B=(>Y3N?Ni{8}GhUm0>6C&_?^pSzC0EXzt9o4qtn!XXdh) zZ(i}gqCMZvow%)y-MT)hbVZ04_hZas-^KWdXk*tYYP{??mHx*q>T}AY!gc*EeH)zt z^vvAJynHa?YvVhS-(wBtzTW32@11dWddgeAD(4T$dGQZqFCFpaBCqC5qKomR`2OV* z7QPvpFXzIMEbG9s9q6t0Kgve6hyJSo+l>LOPOFL;7+B;KEu~AaH=SMrAlA|u%H9x9^32ofFxC8Sh^8qaN9-$7RC*SoRZg2M(R5Ir4o7 z_BZTv#AcD~b7*tfZ%7|R`yk3oe|FaAvrJ^&v!Rnmb=`IWx>T}1c#!gn97)mAXl}!c z)Z|F7#wHXtfK>Zt>caWujyFr*tWlHoqum*6YEDmUn}q(2?2_<~WO3uHi#?aGLS{1W zw4Ry6ok979Ir8qAbxY^HC*Awi@f-eP%v(&lvuD5K-UX~_yY4%GypwapL$qzzj<4T) z=oj7NJDxkP2l=7x{-P6GdDv6z?%IFscbE5k>{x77V!QUZle@-yPv-Y=9X;><&v)1S^eC)S(_FR5a$M~#e zGxzh`?*7FxY&#+QA>7QTC+__r^y-EizHaZl1HR$}&Jdv~vwsg8$B$^YYKP$;@1zZ( z>$CQ1!8Jc1e`H6q@SpWC?%iFdXm>zA;jd3%JtaMl^td1Sb-Vix&h=G#(OZW`dWkthQ{6Kg>rGJsQ zbv-3+lqZs%#k5Ar2A`%}Gq3;ADclc^b@6@#jg#@sSeJE){l!9PS~q8?2O|0Vf5!5b z$qhGrpTr6dZ%K0YBla!OPMddt|axPBFx$|eLoaixOr;2q0 zK6JU<2j<@JEmHsP@tQny`;&1Swg;{9uJ->jw^hJ#NUBVP|QEgw`Yzn-@kLTyZa-! zV-tJkb}gtr*co(wydlCps}E1uhi6CMdfWfP4IROUXR%gYj~#%AUZSl!?Hef1`N+2C+}owf zgS?x34!!iy;b8XdGxlFkJ`YjeU7w*YQr-t6d5x?EeD}U%{6^dkpZYVg@!j_aT_1nea26sHq*8g2hy*y7Dj!FeqLObjxOwm?8xrZ zg-6?2j>pxaJCn!q+1M6g!DRhjxn$ku+94*fIVK z`1ikrH-GcaXn!-wzklsH;Zve9?%pl=QLk%jdy%Q(A0)iu^-t;CHzhn}YC3mSIhljV zM8}0so8SGKNCz1C2XbZR!oPHk%U*+XDm%ZHbI3V!g|@-RJx3Xj32vH09o|PBemAuT z>4yK;Ra-AaPA6%Q_N}x2jJf{19bKos555a}{U%u_eg?h!6z+36y3QjlWUyVQaR>3V z_c7-GCE^n!dpEP8h49Fyyybh)E#hFqTKFtkL%QOAW<5S6v~#>${1pEM-#KH)o3EAm zjT|T0Bi$CYv5W=IgW`LKzj$s3r2Nq3SiXa7QufEP&pBnrO~}(<2d}+8 z8XL{VHGPoCY1`-v#_t^F4}ZurUz5<#NVb35mpXQ=T90gl{+Ks&hR8E^+{S+XHum+k zy6vphElOh^eD0}~pRp@)RVhETXfC!c8^m3u_HE=H&6C$~hm<@eom*!?Tgj*E_V-Th zyW5WH=z0iwCFcoUcc8~}$9u6C@ul|qj&U*yRfnbdU;ckZ9{%Vj;YIn$XvTN}S~_DkcBEYR%k6FQ>v zO}?jf=%!gO@9(@UIun)g)ALJNkG`OZ%q@}KN8bnM95z}DZt8ydUh04xf1WpULipd~ z?w#4e87wk>cxIVD;~!egce*z4jii&7k3Uz?_&yBZwBVZ(BVXjZ5?|!IHIH}ptn2C! z8|uMdcg+pv%$nP?tCKPaU#-m@-^JSW)DPv%6*(ca_Zy3~Lo;Xns^_HhSqGod#ye+g zJ8tdNdcOSJM9&{zgH3(DH~h(S`DWfVd;@$x_VEL4{EIJ7j6Xi2b$#+Ze1nSb1RZ+3 zL;S`s!u`9~@Lik1=zB3cKKTX8_fOc?mvW8N;`KyvzNq57r!(?9^x^M|p6$=0w&f0G zx{c&~BeGi}>m_Xz@!GRkzYjlh-1wfwtl0}X#_yXocmM2p%lE&){^JD?+2m>1g2IN% z?A6-%7YLu06(VU7G=tKaJlb)nMsnzke`S9l2oeDu1BAtOrAzhpXYpNLbdd z47U;N^+@c-JU*Hc65NP8i;mFv)=vilt4Q{FW!;4Sfs1FV5{-C~b zRkgZNC(*G`bI1#}F3PvS?WHgw>IySNhuq!f;bKRNWLV4Tj3$(ve~F%*s&p%BAnT@~X{C!@<$& zw&9`v!O^ACG9%kYB-4?leg42GO{8guX@m1f^G*Dn!(URSi-$-1hX%84pl`frXfTZ1 z;8hl(e@F`OCy(jcO7cB9&Oc7HIyN{MR+ny(id4r&MpOR{^p~oBbsM#u3T2RfMYJD{ZAL&?9rOqEP=?}JIs+rDGT6rk ztDztC`K5u7iBb-ec&jpHZ)Z+yIAL;5?4zxdwB8(-L7Sm#SA~JzKSK8m=>tB4)@NQ; zWvJ;J2g1szu2=gv^^I=SD}Fz7@hp9fzinu2RL!5Yx=u=J4y@;QoBhS)7ZN~vBhh$? z2Hs2mrfX-DmXyuoFBw%Mqva^jus_%zT-iUkiT->A{dexr*0amo2KD8G+s-+gG3;*+ z%jX>4m}-}Ru~F7F2BtQ*qH8p}rft);1An4x&l66b4*s_9(6w*ATh|s4X4zI(X`3ZN5j5Aj{zNq;p=r@CceD7aFW|0opHUf)tBy}?a$ zw1dQ7O8o42?jKsZd8jNDSJM`JUDsaAd!$>_bl!gXDt|DL8ubt95j7prOX0Sm!LmNu z7xq{6fpBosXrH!{c&DY}j}iYEa5gVi8MXT4a!bbsN5+PS>7}r|R8f4!20$@r9V zOg4*DBh^Z+?#J??!1qA^L|~U0X7TWuc~I$W_&}} zjwAeH{+?xw$=H&=JO7OF1y0hq`x@rryVSVM)*;vtKaBTJ*`(Ez-f_<7>b=TFwh2f*@-j6zr@smob1mmkGX)@DVw z)(tV4%Hb%B!-(!vrlHOKbbNWq^c1Z!HZZ_)!W{AStHNq&XoR7a5U|{wXGnho>94-N zo(`q)yiwX_7c`hK!Yj&H+EdlF-6Oj8ByE4uNxhz`kO+< z)#~N3s*nL`tcco{!;#VISRm^&Y2N>*I{&Nn>ADXx|6)!oSu+)#T}pTR15&1|zpY1n z-7kqFe8@E66La(BVXv-DE`=*Tb&j~;IAgCf)OUm_2W zwD02mTfA?kbB^Jym@yq@m(oQ1#ZX0u7aR>oV%}now&34&?F7P}$y;bqoi{k~UxUA- znJs^mI29ehe*yj_7FZe2^=oRooL4sWXl01z%fH0w|AMq%!(YQSA#SCp@hABL_^NVs zXn2nHJZad|#hqlr61IztlJ1Y_VZ0|REnhQ7GoIA76{MAv zIBJK8YpVKNdg1UWb>P!a{iECTAtqgAU}y{B_YhC!^3}YBM!gYUfh9ys@pz1!wzpu~ z>W}HfR^xFEzo(XGWZR$=hA?x#qiFaLeI)C;u{8-@+ecJ3k1ib?+pNN$MflefuAe_y zdkn)c4a=|%$8e3j;TZ*^Xd0$zTBdC}rfcR+&n%cl%dkw#vTVz-Tq|#RR>3OThHcuG zZQG9R+Iicv3wF^l9MiEJ+i@J%$vd7?aEh+sny%&AuH(9H-u2vqTg)4IGjHYXypwnH z`Mj4evtSkMf>Uq{`GQv{6pBTPSS0%*Nf(J$#A(;x zOwy~3pVqZ!?$xy`?q?142S!5XdZ_bI-?RAJ@Ll<(-ZWc;<$ab8PZj&gn{L!<%vHpR zGI#b9h)2RN{$IKlZXITu)<3F-CTlVAWX|o0(|PM#-}qJ*@t}|SS+@n4qr-kwM$gjc zD0ebH@NbF^KTcffn;-L*c~=X{?B~8oId9d|45rp zc@sLGZWl;3)RC2`DipgMZq;@6BRa%H`N+Z&u}tEm_#}NJdC5Gj@_rL1YXC~h-wyHhH^^4RSiYg9p`jJxsM z{oaX*#WHYL9=ma4wv0GSd)+7D-aj$1j5pzyW!vkUxZi!_#Kgcf{)cgY=>yaIFChQb zA8eey@J0pv`*u%EtmQZP&s%wIM^v}9xbMaNuyS7(S1s}z!0+lmo0!m`Y-2x^q45U4TL|i zXJXet@vk%`0ITXMeQuyps4j{#)^H)GiC~Uxxp)_>b~i@=f|p{I0-n_05c- z*e~gC9lRC40sQ8x_FR_jQ^{NSr7QlraT`kd_v63tV-pi=_?^yM;(imqHTXRc`=#fH z#667vv-m%${Ec+E=djcy#_Y#NlNAQ?_MUdL(7I znlN|$4P%PmgsGK5`jgMkXlrk!eUx7`za;;=abJUbGM>f%0o+#NCNz?C^knQmiTe|{ zJL1kGVV}kAdE5?)Lu#CGG@;$UZ(^dL$~$GeF2?_f+v>;W*|&ElUOFOv47gn9IiiHVK;PU5sXy_`@w3Gs&2cv=`%d4}Jv+9k-jfFT?!_+*d32sO_ab z8*rcT@rj9HRo=DPcG!yl`oE3)W}|8cDeG?BhjCB(SKRjD)`y$UZ+WDw_u)2*+se2- zlDQ?}pTO_tPfYf^xIKg0{kSFRN*Q0m?H=43^_BQzR$g0j7xOosqv?mx}AOB+3j`` z1C{=~q>aSyFn)XSi}SAYn-9bG5`L&mMdeD50|URgpNYp(Y84+r0XLoB>G8EUj=xLXJ2ylFMZ({Q``v`!EAA_g-Q7XsiTh)c z&b?FJpTYeA?l)(`qXw$2yszF}%D4dcM{rM?Ex-<%02{d;#D?rI4{J0^4H5!{!3u{NF~cS++Q z?t5`h^4D>D9=8LyJ)`Q=ke^xrp}6ir#!);6Bp*r7zPVxIO#Oq?^?7Cfp9x%9+{Ykn9nwNxkU(A7XE8(PSuUYsQ>Z58ULG9d26&p2XDl0{-YBU zH>xtM&8}M#<~qV${l6zBuA3%|wB4PAdGgE5AAZXtZujGM7`J3TN*g_foAwp>JzmN9 zkg(6-z83e0-x9z0dG;^$=+}mu)w}Pb>U}VNNBGhbX9Z(=Fu;aW1eGIlCT2Q0BbPt( zj581`SVo>d7g2(FM#U-whLQK(LeV|byoSxSc})_;^lZy?bEfNQa&j6>CYJNuoN?x$ z9IzqQU2GNIQod-HD>_k~GY#uZ%Q;IeBJiKbsJli#A)=BygwJp}muLa&|BHKCqmr%eWPM z6bZ<=y3l075pVq!J?fJVTt0;V8t@tT3%(z`HRb;_cvlL~gLXP#nJW_hEb!T2c?6eZ zEd40>Pr=EVzTo@7iQa(Vqt9V}AFW6Gkj_r_W#A{lQTf5Afe(VWlb-m0pZLim?IFK6 z&edb54(+*&zvzO9j)06issA5>_fTF5Ci(9KC;9~9|0VEW;xF|gM2Ny70X?ekXfqrX=9b!gq%jo_6h=+QbZ_5A_(rms%c zZyr2%a_%nmpGkR^B>trT_Veja@N3CK@_QdR(Fc(79|Fsn^^N!oJ{JOL^yu1F#*yGh zz-On@yYB+%0QFlIr}x|BpFC3jKLpEpxQ?Tg_wT^_h@XttZ-5uXvMDKV2fXrP@M6LX zUIJd5^1mFs5uC(-5BSEE|KEXcPT_BYlk;~;uM<8rd8B-A%3vdd&jD{gS&yT1Xuk{I zmBN>S?;=0xHc9`3tN8IU?IpN#rgnWMy<0Q*Kn8y&gMXF5C&|Q(A1S|+!M~TmgBkq( z48AjiAI#wIXK+opL>VOig-0c&QMj1Fmu2v_48A3Uzm&m0%i!0-PbH7!zZ`s!_CFd& zY5(uP4ZbDmf5!KsHSp^xTmcszpPb*%f<>P~`cKC9?H9tsfg^eYe$z$p=fpo-(kH!v zO#U}z@ckM5R0hwIg2s=O|1BAOVFnLpu;|ezkHr5>27fDqU&`Q<=O(dLf1R7bVFq8D z!GD#(pUvQ}W$@24__$;0^Iwv|7i4fHgLh=`-VFX+27fz)U&!G3$JUp}%-}T{yeWfs zW$?ZXK9IprX7J$*o-YUX@gx0fX7EKBd}Rjj%HZ2F`12Y3oeX|4gHM>3ltzsgGlMV8 z;QkEWnZdVY@aHo4TN(U|3_kw&`tqEa!53t3n8DX(@V*RwID>zj!Ne?)k}`%>Z4{t{mF*woXZZDeC0 zSk8Tt^wa(lPITVX)1iHj@PcKTO~R-BLk{*tH*RmrKhl+p5>V|U`g7{(&<+w_u#nv( zy|n-3Y$8RME}fs?B>o5SPxQuQJ(WjK`F|Gw4?eEa7yqZg9|g-YE%-PX%YER*F+L0Y z$lJjrCFQvh{AkKw(ieaAsQRSwy@a3lgsw@5XnhAi20ttzg&$t=I!)V-ztkrw@3R9E zS{{{N78`?lifw@m%dpafFhkAQbkej#&7`9-Hj zJ*xa^`~czi5T0g_!v81u?o52q$4SS}V$tJC`={~iUeA6dlit;t@M*k?@Q|C;M0DK`9pow`0CUy0UO|pNKpLW1y1xS1>XrybR-2o4o-9* z1-}g5LwVge{^@TZK6q)2=l>q`l<~TZ42AzZ2Q1@J&Qb;Ufo1$9_(NbBZ%O#|q?bIh z9u0%{{yJ&j8IjkTRC{b$uW4V!KdN76xArJl{Aq?Lzx|o?BmvPkRFA~s*``M?X_4qj zVXkOv2kBqw52^pJzz#SW-)}w{dY0<{wcyc||DS;GNnuG}bb{5R^2=h;pH2L4Cw`*W zDfxdDoak!`ehHlDT?#&psEKZ+;7|S$DN&yTLa%85AA%*ngE$Mmb0hl+$`{Q)_5*oe zwa=c||4U%WUmn>n{8@?l@Qt`Vz<(RCZiA1D{V&laqPPWGf5xdQ^Xi z{%C@S2`_jz4$1nH_Lp#?bE%#V?c~cMOR)us=Qe&I`(P*G=7ov6TMxTAB#?5 zzLMW*L=b#2IMK@${7!J9dn-7&MCE^w@X}uw{t^3c>Klz;=EGHgtlD!l_WuM}+G|;i zzYUi9h%8y+cUH8hKla4_9|cSKf_%=d6OrZe~)I` zWA}A>97MHW77y&K_s`PpStwUa);LaJ^{LAPc>K~04>U%j@^pxe1`hNsG43?S*eiD2SIGXR^YQGAv$NrxN zCwj^f-du!7{78FU2$uTIz%7~Y>H6M?{~G)yTH-HQJ*qv2Tj0lTs1KjUFOl%Uq`u^E z+MDU$Zzb)+pyAoQt3G}jUqbl1@xPOBQoc`s_kq*=gkbe>rgJLwCH;gxio3*DPlt9n z{u}V0kAsZ=_kagdSi)_1uP!eh3{6lYNJ)=G3k^Wk9rNYU0=sGR(ivCN+d%8U0Av*BtQT-$L3!345 z@2~eyc-l9jY9#y_9zB=PC z`snHKS-j)}_5NAB>`y2C-^Y3+?Uk%YCvH^bm-MB*|E&bQCckL?qkql|=zrQzbX}ys zwt=Po3kffHMHzZU{-SFlIM}4>w>b9y23Y#zV2tPVF+NlA|1a&8JkpV_io196Qn0CE#vEtrC{-sjGsgwUV2!b1DW)%`=B1VC;n;t zPSRWO?MeBq1iU{L{x@-7!Ty1%!k3{ zD*t3W?Y&gB-veYIT@J~Q zkM7j&WC%VFoZN>H%twZ6cNPRc3Qq1a2=-{NYIVBmA?e@gn|Dr2GZT zeLD4YXn#)l!>RC3(LR!%gpm4HnV*thv>t#TALhJ``W}nFl<$Oh!0#mSX}=QqZ}4ZB zM*jQ2Po>)DX>f9nLE=BrpnmD{k&Lz`RbIgxGWgjR*!Zw6(RkGS%;Md9^vE~y&*J3V zKJicEXDR>UC*$$J_?9O**H6M{adO_D_-ApVACUNG@nbjZQ9k1T`ZH*M+SkTK=GSTK z*&k8gjTA-tFUR^R?U(f5-QdxrytMz%!P1_4h%ezEgT71qC-ZT`M%G)}CrR%|V5$Gs zIQ-#$;!~akuX?+xe}cC$pQL}5#pU@DSn8Yj-&m!*lxGF$$#^)A`Xo;>-qZCJzh!@= z$3awoX7PO~|2IKTBtFA7s-F**@JarqOny7T5`PIvC-gO)o@D&gU+ePXQTeCw!0fH_4e&kSd4!Ph(QzjH2>AFI zcaK1i!16@xALE5FK7;VdBjsHUmismlJ&fz0+`o|=_Tn#ha3p@xeuCB0p>^fp$H?z! z9Hcz*^rid-@5{1P~+-wyEN?@VGzZ{A*AUOXMzC-G1207?9B zfs;q-_sb0KS(^B&{t}ck=A&_8|D z?-2>je0c=CA*nC8ZLYP*AyJP%$u%s{JTj=vq+t|;8 z7sU9crTmDWgkCzS{4aYa{9h`+kARc=T$10DF_xYY{HaWOUj`?4yps8PcPjnE_-`fs zWd5CEsPNJFV+33TP97=Wl^HC4axY9hYJ6Og!n+8+i}dFbK=R)Yz6qS9FY#7>N|zT8 z^0Yru=_TvecN^rF4ll8u`g>hoJSzVzKAiI3LVrm7y#$s12+1$GyC&`TUzz+Cm?~xY zU+V8>@Ff{6;pXnw<;A1QBX`o&)1eI!UhdST>2Gq!E(yOd75>MBua%Ehn{O#RFG^j} z-z!q#C7*pMd=BC7qrD@3m-v0)11T)wUrL4l5dQy?>YvYnA4%b7z|Vta{7QfJ*zEto zvtoP>c)@?@njT|bn%u)vk7|!Bmb;5-|192hU%h`8FZ^u1e-_{Q5B2_8yyX6R|16e! zmFiLDPvd^-yPEnY?IGc|ro!KZ|4sNO{q@h_GQK|!ek=JW>&Z{RXM?3CGTzUGew~}ba=~{+3V#Z` zDuv%H^oaT`jMKlJ`Ey>%{~551_k>=)^=j5L{FD6O4L&P{KM!7(!d>suwBJdkcMW)D z3Ll`p$s_aeI~go~2UG1Y`1ya*<;ByX{VEgwBv<*!|B{}Q!Mz#$z6}0!1|Q7eqx1FY z=QG&P;2Sge-VFYJ1|Q?qr(ek6AcOxjgFlK3RVceD&*etZXa)bHJmopDgbx@ZvWrdMWYW4Ho`utER&LJy_OzUQzmo z_;Kg_$?~jQ4!x(oLeC}s7Vsm#R`mOLxXh1%zm&rFtYAHcAD6p668;ca_@AUb&Rfa( z$SsP$7ysMAKTY8aR*@h4_UsN7|6jo?->7SM(GC*+8U%U5Z>)~XbLRQ<{%g{MF!HFAJhyw3*tqVBuGi_Wu<)(N~^FejUH7X?wfh7>DQkMBsFN zwu003`8N2cw@lXW?6)cYM((vp`L}{)zoC<&;J*XQeni%1!FR4sf(OsE_UBr^Hq!dvao6vsChnc2Euq<|-|>#>c2!uHsfK&j>x! zDtS)P%9o0Tia`S#MLTp#g);5iZpeJwA-%Rk7TOMJw;j@HJEYroNVDybmgbs;ty{O* z_EmiYBVJ!|Si^E^uNY0ul}(K6Smn?%f^y0Ay;n8BxuaLYypLURY`ajjf?AiCt$Y~d z?Eu3(rd1BCLcugjmRB*2A_jy4uIklI1>2r7m}QLJSl!h`dtB z_>G56%iL;B*D|ElqNOY;cOhxbLSl0^uS{~89uB?HT;l)!O@m>%uzJ<3g^?)7 zDPobTghi=ZJsiIX(Qu$1j#~^}tKf1Iv}Bb6J8zUAY`I!BT81npZPPNOS))v?gVx4a z>!4Qq1*nmn)~VKLPRpQ$7TsuTo5w~5dKuH0&B_He6bx?z<<<-b)o`GC-=tcA>GEo3%pA=A~c8CLGa z+A{wjDnTKSO*zlAO$$qH@hT&9Gi9+j7aEn&_6*Z2!W39`MFn%B;n_NzqSdX#*=?rh zwi&L*gcxqQTnGw~a>Kw(of(wNwpD~qS%z;Fj4feNc z#$4Gq3RXT}c6}G#tQfbl(K?9LI*8pmh}$}d(>h4Lb&x{qAg$YlnboT4m|qe^Y+r7| zE_=RgG zPNhV~d6l2p%+qM**)&ei0D}#|juHadrS@B%gbSh=Tv*N-u@npbGACnO~y{FyGQ`Ueh z`*W5D&roth)AhrG;e>H{%1pbmUvyp1FrdCc(R5XR7zP*brt>qK_*qT->?VFr6F;|! zU%rW-*Tk>T#IHELA2V*+c45Lz@7JVVm~PX@Ytk;T3d7;%-fAWAoO~hYl+Dm6v0ml_ zvskv{erz3tf!8V(hF_~748m4H9IfP!gn1_z&AEQ5Q1Fe=u`o?rwiD@4Ff=$a+B?)= z&K244nO-?4ReTqFHsyG{27ISvbSPPmEz&aW0)}?2086+|6v*UDb1efIF_R@Cr;2C! z<-jxw6}wROj3lc~7`lZK8`=zWl`s2tSSp5o#SX1_+1EzKN}~f|j*Tehc&)r)mu$Ed zBQB{wxUFw!OU^aIvccxwWbe+7G3k_MzNXg9*J|o(H}!Rz`ogu1mUEC~->led4=J%1 z#?^^->rPGJR%j??KscBP$cjPH^I=8vMzLJ>kzk43uNJ*HHF~{(!V61z&vZP`HGL22 zR3G25ro@l8!;}Eau`)D0Q1UTm3_B z|K?#tVNO&P`5g&0Ywe*5ES16Lv66R+arInQn3_mL5mvZS)?|y2wopV0RwC29aUwdyjZsn%d)j*9(zW`vLGu+S(TvpH&+0!f24Ox85sCpfWhv-aw?|jAPHpZ z{Km=RTn>t%Pt-Hf%t_^nbHiyOn{lkv_8Zi-BDZ4HtGW@V$ytmu)nj%xPLG zG|NQ?F|3$9uM}$%F5fAH71P6ty5r?t->>A6ZJD;8_kF|7R|=D2@|Gdl3Xef`Ortv1-WgvN)9GOe18$vGPH& zQgK3&2DM*#xQ2GCWJSVd8GJ`rPV>AAF5$~TYnNYi!3vpQ1#nNf2B1gw=khSv9d>>r`Js6W3%Qty8TDW?KiXNoHFHwcBqj`xT_xe!JS9OoqH# zP@;7N(SI%%ow4M=vdXR-g+Y#&6LnY^1r)D{K*$PNqbFgpoOg;P69&dXUY~D&YP8?L zld}Gn4Q$qq#aah#zk#jxyUl990CxNH(Qbb}+U<{V8@b%HOsJhuO<_Z#kzqO)U%Gzn zrR#fFEML3+(o0r(y}hvQ{iAMgFW(}8;_wlSV%{#4Z1{GI^N>|dlCRBgzLZfZhcNUk zgnT@sP%=2*gMUQw=ar?>g__jM77K}B4n?I z2{-@$GWpZDJ(99%`^9MDR~vhUqT!UvZfN_KUG^=XT|XN;JIq@Zwn(m#o1|wggK~Tl z_ekrY?H6E@qPI@9My6W_tuFkDm<(Amfv1w_`#aBUsbO;)%Rzg=ul(w5r;lamV%ttpe8 zPoC{;w5KW-qfL8TEwOHt@1X^>MA8gXwL0Si`Ev~JD))uUmL9JI16zTeOgb_(`Os3po$!3QdI(&~SwB#FJsNSF+ zmoLgtLgS)F&{~G9*9$33oh4D{*7)LFPRSP{rMl&1f0)l-iX^L%_DG~Hml9!>%B->| z?)kng-!g-Zp1!J4u`>HaQ_Zbl2#e*Wx8~v%%h#xlVDE~HFTH5}6k@?Xw&3{XN}$K@ z%Mk);t6YpVh@=iGpyed{@hDzzB>8DC9kjL` zX&tn-BDD@$BS)=+*2ZP)ptXgzbP9g&E}j3-<4f#XPJ$g*Su-HY0hii{4@$OxbCq|!*+Y~*7O9}5Uw zpP{e50DuPXX1*%Gi3Xb`J`9Ki(BMOXFx%0IhSgRmv#n5urU+1_RDo%?-Mq<}q+Lo* zUYdAvHWG=G8^+}DV|ve8=W$dNR1B19f-nrr0qV3CZ2^1YS*0-Wd_H9m)9scaYZJ6( zNVi$hqE)|kI^s@M;Zz3_s&YBLuFbavbCj|6&GVQ?3Cb1QDd)pt7_#XNl>9cY7X6k< zOj+L>Dq^FY!Dbju$bv=liHJUKEA${a2J`q}rEj66?UYY?%)X3z=(escs#z z)~v0A))?WIL1Bd3E^4t^Z{@Y9Edz8WMG?peLgWixe1d5-^Wr5E0dXzh#Ibgu-=2;E0$S_n&e?O^Q=vfJg0ta&1~Pd z@|>KRMb=f>WtS@G(U%NkQfS*U_(vb-VOmy-*rFGEu`!!!9^DR@&H>1bw8=6eTW`q>+RFjxO$Tko6 zBW>s{jr9+V_79Ha@{Ut>WE&D9#IzG#F=%JoL8UxxrYe-Hy`XHw+YTyJt-VwoY1sCH z8tqrhkw$Mb)%JsOUBBH_vE0#i&{xm`?RSCu3d$-hOnZ&x%39W5P-b4+LEG=xeETEI zYrgR0T4=vr3+=Z+q5Y9%v_G_quOMjq)hf1Mtz!GLpx8dq zEVkXTNFCapFl@xz588Hbq4C&$s_j=RVq)7O873@knnAG{gE`Zpm5xQo*LZRBrC>ccm2=}_TMaqPUQlYwz9p4TQU1YUpP{}(+DIb)S+(XGz z;v8Ic<-De@m`Z)k(3Y^eI@~&a^1c(ezU?`o-1S8@E;>tTH~CA4hg&6YczN5a6l}*Z zO|(VplTQf(jI!K{?;YqLkpq^nXrYZ<;=&YXJmoys0BgHLDqRrf5}lcmVsw>$4RKsf z?W)^|Stu9EC3NEC?7>0+-ZEys(m&WAsp?s-%dtD>N~MBbs@STfO*eBJ4fTwI45(gI zD@8;>W<~TcywEOMB^P<4x(_KYE<#GV8zo^{%#6+bqrD>o{ej3Wx!PE;jS#_SsbrK( z97rTJ&MRGA(`GDI{o&q<4}&cVok(ZOCNr&Y#Cdrd6XPFsN+fT+SEHVw7E%`-jTkcF)lQ#*&nAhI27Nc9_j1n zw$%uSwvZ4c>8OKaRiNcnZaX(Hz=ijM$C5=4aIVOJwHyXQn+Z6tHi7)~3CI|D zs;0%xd(p5`v}oFt+mp){9JY@xmp`LX-3xlk2+lIm$&(8p|JLu8W|!yh=@i)_495H5xc<$a4YC;nIjxr9T`fo4jITj7A#@>pr4Qx;>BsQ=wIfMFn*VWURgP+%*@h=)G+D znoC!$>s`Hk-Rf1B(9h6t(<#_?1v3zGtx|P@+|J9(f1Jpe!k36S7XedJ85r6^-cEt#zCx}R7B|9znzSln%oG%qHd4G~ zM`{OBW+!AQI~6RpKz1zQWJ2M(<7-uuQ^0hhIgmDKQl^VTH}7++hdU5*0jjdFo>Q518U&kTG3O#WY^n(%!G#KU2)Jm&ZIzbz#zd%HuTY`p%2}PAD{|TDASX9l#`;_ z@*CCyh!?#E6^JNJ>)ub;ga#=jBu+Y|c2yAO9eZb}aKZSp6V2?&Cr7v3s*+8!I_ji# zY>QiA91mk5$Ab4&K1VeE=+li`@< zQ0!w8?ZnKz2ldBAK9qX;U`oz^FE(V1X0|Z+UXa?pz zH61dligj1-gbZT#gX2StH~3t~EKXiTout)?9wED>e8{!&3euZ^+s@I5s88NjVizvE zv#}~OJ8igcNAW%lL!w(~x?w5En`|(AyHSzjG)o3X9k?kUnvRPmn;MS|(<~cBAGtV$7#dFieMD5(5-ssT7U4f`yqZG-QhiW8iun?)I~Cx`AAjy#2AARKuL&Dv5rQSD!wS}dNjdno2jH(<1* zj*9|fCEh(8NlJMOM!sT{y&~c)tdlk*-IEIQ?l4ABM2b|(qc3h)*e`Pft}Ac}C>qnP zRnp^e0f9G*tTaVLl<+QA5tXrINQ>R&{~^;UYJ5ynm}niSj(WjB=nsw!dn?wgT7J=` zVkZ-8U=FMq5`GZ`x@|0=>6LJ@IjwwrjDoyHj#t>9*H%}uK?AsK7K$*8Y%MUp8FdZ^ zCF;oNNH3kGWL`>G5(#yt-nJ@?`d5a%r6ExTW~*N*gxszyVv^d5ZO;6Ul_XxQg~dcD z%t2{H=oM@DKXUOb-4tl4yG8{qb-8(H$A_c!te9m)=haGBwxxfxFS*;3uP|ScfcR{s zOa@NWp`O~E)%Asnn$fVGX5%wexWKN&446{fdh0h=jUOmr~& z3eRApcsN<5R@y8?hxsCD6oF-81;?-h45%=yy$W|*3QBU6@LN-P za9FZ@SSedn#=?l4+8X{hm~)8A#;`_MiYZW`Wmb`cxdz2)V9Cb{uxf`4gb0oWOI{^eE%-ETWwY(VoC)>_O{A-Cisg#L6;oRaX+9pD2g8m7VbjpI-mCn9G1++W#epKS zRMRypJ~y}0(rZ~mr=Hcwb+E{`STuV6Td#1crL;l)qAqLQK-0#DEy(QuO?6J$yQvy& zZ4gj!*`Lcm&?_6-8t))b&VY(>X#+#$4n~?BWeui*K+cE+a_i+J)Kw>;FgS)+cCmKI z-Vl@cPBQdb*26ZNRU}dOXsa8h98smtHlqHMnVXSzg?zE0TyRSPr*MAyYZM~kj3Q+W zK?EUo5Iycyaa0>%&po1MwKi%X7YV#dSm3AxB@J$6nQWQc>tH*clnq8mn(=G(!42-z z7AqKeD6p?7)9I7jMXpPlMPxf>5gA6&L0gh^Wo?m}rH-tJM)FFHjk$x>zEY`-!DXjt zS1NAYRDOoR z=8{_}kekCw@PWjmQRQmq1=yv{<{}%4Xtq}>{ka@M5GY43ck#%&nju9__z{ZcLntir zT|Z%BMZD59Gk5AoO=_9dxYt~+cC~ihw#}uXfw+c@GlwrkaMH*PKL@R;Hfva%YL~G+ zS{8+305rDxM6<^Q;|LA02>NRQ7t%}v`(di-8?i#|aZ|}6bmS>;=jqiJ!b;AS8qcrZO8{YLX8 zGXZ}C0|yC~44Qc0a3j#R%`i00u;gLkvDv^8LZ`U>(hyT(%1$gg=$OjS`vo=(CB&1q z=Y~bmIEg7+<6WhLyz@#20k9Y&;Oa3JVnr}p!60^6ii_t#y0J*f8JAZ;wg+bvpQg5! zuEnRR4W&}i%xIlNe4N@ai4@UpA<&(|4i!<6!$=CUV|FaaD{Jj^B)pZ4P#4i67oPJX zoglHOaxG1K#M8b}15>r4(nU_FQfxyYmrD^&KE8mArFLjsqoZvP7wl1DAs5R9>`_oB zV@YqXCv!(%6BK2it{&1f5q@7W2iFY(2J^P*~q5 zn!Fd3?ZI%17a8t|^v6(vF^Z)CmfzHaaD*Y7D|;aR|lH4?8-YY`KqJ<^bGIWRWdp z)V1aH$c4K#DgTit5l^~?Lou4SE$fji@vou`2~B?$NhF6AN1jBDS80?4v$DnnM2fuA zD@`?2{1^V->Meh1d=)Ih!kJQOR2-5I66%32>>0&*D|E zVS_X;Far;U+rd0^UX;ws(9z^nhqFesP?6dqPt7}sTrkHYXSOX9hzA*yaY_PHX8!ay z1RBr$$og2UcZYVIOXtexT#NvVo^cbmEMJYQdsXFYOgGZy!;o9CY+~rfas5IldV%e= zUyXHZQa;2H4c7ORP${|CC1*k9#H3p+ncyOe$H$Yfx`PG{YB@1k;WL1IO~F9f8~TM% zhC4h$q};S+plDaKyt-*jz5%N)GBx-tYlA~hPD?6$$pZz|fV0UIr!q7=QmBj#1~S3( z=M9S5K{2|4sMHYp5K-`LC1gMtYv*H&VO(1I0vP{nB=TI0lh2&W_b?cqu%|^EGffCGs8P{I)s0eUX%WIs1i;gkp>+!Ju4&p@v`oQ?XW6SrA*K|s zB88aMm^Ou$eUUI4)AmKn6q4;{qZG2#Ms&w4p!=F2cc~Jg;=5?GZnx3F)d$IF=_arDf&V@==;t(#99qEQ15|f>8)C|Axw4 zH20>ZBrWM-?X2d=X>!~}M_vXeIWIcmGB`1B(x?oz#)X2_6wnJw|2&+$wjFX^wZJie z!zB>gv{5%dQ;rNWbw(mc5ZQoZk?WJQ>82LX*@3s7va9#ZE{k5*`{f?$B=6CWW;dC4* zQWWkH!aYJbCkYh$2|P9aE$L}5t8lyIcl<~i@|?k+KcoM}PyQqi(i)B& z`LFz4O?zVkcuN?0&f`z&nmoG*H*9O#(Kvh$52=T=%|-l0W#cW+;p02BjnOalUy|Mi TU^?7}*K}wH-ZdF83HSd1Gpj$( diff --git a/tests/secp256r1-decompress/src/main.rs b/tests/secp256r1-decompress/src/main.rs index d78011432c..3de01507f3 100644 --- a/tests/secp256r1-decompress/src/main.rs +++ b/tests/secp256r1-decompress/src/main.rs @@ -7,6 +7,7 @@ extern "C" { pub fn main() { let compressed_key: [u8; 33] = sp1_zkvm::io::read_vec().try_into().unwrap(); + println!("PROGRAM compressed: {:?}", compressed_key); let mut decompressed_key: [u8; 64] = [0; 64]; decompressed_key[..32].copy_from_slice(&compressed_key[1..]); @@ -22,6 +23,6 @@ pub fn main() { let mut result: [u8; 65] = [0; 65]; result[0] = 4; result[1..].copy_from_slice(&decompressed_key); - + println!("PROGRAM decompressed {:?}", result); sp1_zkvm::io::commit_slice(&result); } diff --git a/tests/secp256r1-double/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-double/elf/riscv32im-succinct-zkvm-elf index 85a4feb2498f8685d3c9714ceb19ae3d4f6ff4b6..a91f367b90385719fa19dbc4d3bea05fcf59f9c6 100755 GIT binary patch delta 43044 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 OKbGJ=_;(+i=l=mBJ-dkj delta 43180 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 ICBlCGA1u(x1^@s6 diff --git a/tests/secp256r1-mul/elf/riscv32im-succinct-zkvm-elf b/tests/secp256r1-mul/elf/riscv32im-succinct-zkvm-elf index 04a403206554c18e7e09005e670dd361f87929cd..2a1f5493f0290fab9211b311b5e3c8c82b65237a 100755 GIT binary patch delta 44024 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 for Secp256r1Operations { 1796723186, 935285237, 3417718888, 1798397646, 734933847, 2081398294, 2397563722, 4263149467, 1340293858, ]; - fn add_assign(limbs: &mut [u32; NUM_WORDS], other: &[u32; NUM_WORDS]) { unsafe { syscall_secp256r1_add(limbs.as_mut_ptr(), other.as_ptr()); From ba0f133ea8b23ab68569aaa6ec8e208314ae5efd Mon Sep 17 00:00:00 2001 From: kaylee Date: Wed, 15 May 2024 05:18:20 +0000 Subject: [PATCH 15/17] fix --- core/src/syscall/precompiles/mod.rs | 2 -- core/src/utils/ec/weierstrass/secp256r1.rs | 5 ----- zkvm/precompiles/src/secp256r1.rs | 17 ----------------- 3 files changed, 24 deletions(-) diff --git a/core/src/syscall/precompiles/mod.rs b/core/src/syscall/precompiles/mod.rs index 46c1e6ef38..f33626e7b1 100644 --- a/core/src/syscall/precompiles/mod.rs +++ b/core/src/syscall/precompiles/mod.rs @@ -8,7 +8,6 @@ use crate::operations::field::params::{NumLimbs, NumWords}; use crate::runtime::SyscallContext; use crate::utils::ec::weierstrass::bls12_381::bls12381_decompress; use crate::utils::ec::weierstrass::secp256k1::secp256k1_decompress; -use crate::utils::ec::weierstrass::secp256r1::secp256r1_decompress; use crate::utils::ec::CurveType; use crate::utils::ec::{AffinePoint, EllipticCurve}; use crate::utils::{bytes_to_words_le_vec, words_to_bytes_le_vec}; @@ -160,7 +159,6 @@ pub fn create_ec_decompress_event( let decompress_fn = match E::CURVE_TYPE { CurveType::Secp256k1 => secp256k1_decompress::, CurveType::Bls12381 => bls12381_decompress::, - CurveType::Secp256r1 => secp256r1_decompress::, _ => panic!("Unsupported curve"), }; diff --git a/core/src/utils/ec/weierstrass/secp256r1.rs b/core/src/utils/ec/weierstrass/secp256r1.rs index e30780c994..4782532007 100644 --- a/core/src/utils/ec/weierstrass/secp256r1.rs +++ b/core/src/utils/ec/weierstrass/secp256r1.rs @@ -3,13 +3,10 @@ use std::str::FromStr; -use elliptic_curve::sec1::ToEncodedPoint; -use elliptic_curve::subtle::Choice; use generic_array::GenericArray; use num::traits::FromBytes; use num::traits::ToBytes; use num::BigUint; -use p256::elliptic_curve::point::DecompressPoint; use p256::FieldElement; use serde::{Deserialize, Serialize}; use typenum::{U32, U62}; @@ -17,9 +14,7 @@ use typenum::{U32, U62}; use super::{SwCurve, WeierstrassParameters}; use crate::operations::field::params::FieldParameters; use crate::operations::field::params::NumLimbs; -use crate::utils::ec::AffinePoint; use crate::utils::ec::CurveType; -use crate::utils::ec::EllipticCurve; use crate::utils::ec::EllipticCurveParameters; #[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] diff --git a/zkvm/precompiles/src/secp256r1.rs b/zkvm/precompiles/src/secp256r1.rs index 5af30e1f2c..b150db2d13 100644 --- a/zkvm/precompiles/src/secp256r1.rs +++ b/zkvm/precompiles/src/secp256r1.rs @@ -188,20 +188,3 @@ pub fn unconstrained_ecrecover(sig: &[u8; 65], msg_hash: &[u8; 32]) -> ([u8; 33] (recovered_bytes, s_inverse) } - -/// Given a signature and a message hash, returns the public key that signed the message. -pub fn ecrecover(sig: &[u8; 65], msg_hash: &[u8; 32]) -> Result<[u8; 65]> { - let (pubkey, s_inv) = unconstrained_ecrecover(sig, msg_hash); - let pubkey = decompress_pubkey(&pubkey).context("decompress pubkey failed")?; - let verified = verify_signature( - &pubkey, - msg_hash, - &Signature::from_slice(&sig[..64]).unwrap(), - Some(&s_inv), - ); - if verified { - Ok(pubkey) - } else { - Err(anyhow!("failed to verify signature")) - } -} From 6456f5ff7f818baab76bc6a7059b0618f7e3428c Mon Sep 17 00:00:00 2001 From: kaylee Date: Wed, 15 May 2024 05:42:40 +0000 Subject: [PATCH 16/17] change constant --- zkvm/precompiles/src/secp256k1.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zkvm/precompiles/src/secp256k1.rs b/zkvm/precompiles/src/secp256k1.rs index 6f4961f074..91a32054d0 100644 --- a/zkvm/precompiles/src/secp256k1.rs +++ b/zkvm/precompiles/src/secp256k1.rs @@ -25,9 +25,9 @@ pub struct Secp256k1Operations; impl CurveOperations for Secp256k1Operations { // The values are taken from https://en.bitcoin.it/wiki/Secp256k1. const GENERATOR: [u32; NUM_WORDS] = [ - 3633889942, 4104206661, 770388896, 1996717441, 1671708914, 4173129445, 3777774151, - 1796723186, 935285237, 3417718888, 1798397646, 734933847, 2081398294, 2397563722, - 4263149467, 1340293858, + 385357720, 1509065051, 768485593, 43777243, 3464956679, 1436574357, 4191992748, 2042521214, + 4212184248, 2621952143, 2793755673, 4246189128, 235997352, 1571093500, 648266853, + 1211816567, ]; fn add_assign(limbs: &mut [u32; NUM_WORDS], other: &[u32; NUM_WORDS]) { unsafe { From 551083a1bb0330a57f5dcc9a0a33e9da20fba30b Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 15 May 2024 22:47:42 -0700 Subject: [PATCH 17/17] hm --- core/src/operations/field/field_op.rs | 3 +- core/src/operations/field/util_air.rs | 7 +- core/src/stark/prover.rs | 9 +- tests/uint256-div/Cargo.lock | 80 ++++++++++++------ .../elf/riscv32im-succinct-zkvm-elf | Bin 235624 -> 235128 bytes 5 files changed, 68 insertions(+), 31 deletions(-) diff --git a/core/src/operations/field/field_op.rs b/core/src/operations/field/field_op.rs index 06af3ec83a..50a655bf79 100644 --- a/core/src/operations/field/field_op.rs +++ b/core/src/operations/field/field_op.rs @@ -1,6 +1,7 @@ use std::fmt::Debug; use num::BigUint; +use num::Zero; use p3_air::AirBuilder; use p3_field::PrimeField32; use sp1_derive::AlignedBorrow; @@ -117,8 +118,6 @@ impl FieldOpCols { modulus: &BigUint, op: FieldOperation, ) -> BigUint { - // Note: Zero-padded rows are handled by builder_is_real checks in the eval function. - let result = match op { // If doing the subtraction operation, a - b = result, equivalent to a = result + b. FieldOperation::Sub => { diff --git a/core/src/operations/field/util_air.rs b/core/src/operations/field/util_air.rs index c8c552084c..14319437d2 100644 --- a/core/src/operations/field/util_air.rs +++ b/core/src/operations/field/util_air.rs @@ -11,7 +11,7 @@ pub fn eval_field_operation( p_vanishing: &Polynomial, p_witness_low: &Polynomial, p_witness_high: &Polynomial, - is_real: impl Into + Clone, + is_real: impl Into, ) { // Reconstruct and shift back the witness polynomial let limb: AB::Expr = AB::F::from_canonical_u32(2u32.pow(P::NB_BITS_PER_LIMB as u32)).into(); @@ -26,9 +26,10 @@ pub fn eval_field_operation( // Multiply by (x-2^NB_BITS_PER_LIMB) and make the constraint let root_monomial = Polynomial::new(vec![-limb, AB::F::one().into()]); + let real_monomial = Polynomial::new(vec![is_real.into()]); - let constraints = p_vanishing - &(p_witness * root_monomial); + let constraints = real_monomial * p_vanishing.clone() - &(p_witness * root_monomial); for constr in constraints.as_coefficients() { - builder.when(is_real.clone()).assert_zero(constr); + builder.assert_zero(constr); } } diff --git a/core/src/stark/prover.rs b/core/src/stark/prover.rs index 2ca5237e09..f6f16b1003 100644 --- a/core/src/stark/prover.rs +++ b/core/src/stark/prover.rs @@ -367,6 +367,7 @@ where quotient_domain.size() ]) }); + println!("{}", chips[i].name()); let main_trace_on_quotient_domains = pcs .get_evaluations_on_domain( &shard_data.main_data, @@ -464,8 +465,12 @@ where }); // Collect the opened values for each chip. - let [preprocessed_values, main_values, permutation_values, mut quotient_values] = - openings.try_into().unwrap(); + let [ + preprocessed_values, + main_values, + permutation_values, + mut quotient_values, + ] = openings.try_into().unwrap(); assert!(main_values.len() == chips.len()); let preprocessed_opened_values = preprocessed_values .into_iter() diff --git a/tests/uint256-div/Cargo.lock b/tests/uint256-div/Cargo.lock index e228a8294f..ea666e018e 100644 --- a/tests/uint256-div/Cargo.lock +++ b/tests/uint256-div/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "anyhow" -version = "1.0.81" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "arrayvec" @@ -118,6 +118,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ "const-oid", + "pem-rfc7468", "zeroize", ] @@ -170,6 +171,7 @@ dependencies = [ "ff", "generic-array", "group", + "pem-rfc7468", "pkcs8", "rand_core", "sec1", @@ -214,9 +216,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -292,9 +294,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.153" +version = "0.2.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" [[package]] name = "libm" @@ -310,9 +312,9 @@ checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "num" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ "num-bigint", "num-complex", @@ -324,20 +326,19 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-complex" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] @@ -353,9 +354,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", @@ -364,11 +365,10 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "autocfg", "num-bigint", "num-integer", "num-traits", @@ -376,9 +376,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -389,6 +389,18 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + [[package]] name = "parity-scale-codec" version = "3.6.9" @@ -413,6 +425,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -429,6 +450,15 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -553,18 +583,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.197" +version = "1.0.202" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.202" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" dependencies = [ "proc-macro2", "quote", @@ -622,6 +652,7 @@ dependencies = [ "hex", "k256", "num", + "p256", "rand", "serde", "snowbridge-amcl", @@ -637,6 +668,7 @@ dependencies = [ "k256", "libm", "once_cell", + "p256", "rand", "serde", "sha2", diff --git a/tests/uint256-div/elf/riscv32im-succinct-zkvm-elf b/tests/uint256-div/elf/riscv32im-succinct-zkvm-elf index e3c869688bbea6d2657093ed0d644f15600a9ca1..fb8d9db5d94d05c9fb71686d93183ad2c86bd927 100755 GIT binary patch delta 77861 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

^WD|G@iiPiULQ`TXWPSV7H6X#6v?p8OZU6R#)8 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

    * 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