From 4b6636525efbf5d947dfacbab9182fe2d541b7a5 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Thu, 9 May 2024 15:45:46 -0700 Subject: [PATCH 01/22] fix: proof aggregation issue (#683) --- core/src/runtime/state.rs | 1 - core/src/utils/env.rs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/runtime/state.rs b/core/src/runtime/state.rs index d80ddd0b6f..09f6236cc4 100644 --- a/core/src/runtime/state.rs +++ b/core/src/runtime/state.rs @@ -43,7 +43,6 @@ pub struct ExecutionState { pub input_stream_ptr: usize, /// A stream of proofs inputted to the program. - #[serde(skip)] // TODO: fix serialization for VerifyingKey pub proof_stream: Vec<( ShardProof, StarkVerifyingKey, diff --git a/core/src/utils/env.rs b/core/src/utils/env.rs index f88d5bf427..371bdc561b 100644 --- a/core/src/utils/env.rs +++ b/core/src/utils/env.rs @@ -42,6 +42,6 @@ pub fn reconstruct_commitments() -> bool { pub fn shard_batch_size() -> u32 { match std::env::var("SHARD_BATCH_SIZE") { Ok(val) => val.parse().unwrap(), - Err(_) => 0, + Err(_) => 128, } } From ffccd03711d69f94162b4471f07ad405c633b6a3 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 9 May 2024 17:51:25 -0700 Subject: [PATCH 02/22] feat: program refactor (#651) Co-authored-by: Ubuntu Co-authored-by: Kevin Jue --- Cargo.lock | 1 + core/src/stark/verifier.rs | 2 + prover/scripts/e2e.rs | 107 +++ prover/src/build.rs | 7 +- prover/src/lib.rs | 936 +++++++++------------ prover/src/types.rs | 92 +- prover/src/utils.rs | 51 +- prover/src/verify.rs | 29 +- recursion/circuit/src/stark.rs | 3 +- recursion/compiler/src/ir/builder.rs | 6 +- recursion/core/src/air/public_values.rs | 101 +-- recursion/core/src/fri_fold/mod.rs | 20 +- recursion/core/src/multi/mod.rs | 24 +- recursion/core/src/program/mod.rs | 4 +- recursion/core/src/stark/mod.rs | 6 +- recursion/core/src/stark/utils.rs | 4 +- recursion/program/Cargo.toml | 5 +- recursion/program/experiments/.gitignore | 1 - recursion/program/experiments/fri_sweep.rs | 35 - recursion/program/src/challenger.rs | 31 +- recursion/program/src/fri/domain.rs | 2 +- recursion/program/src/fri/hints.rs | 2 +- recursion/program/src/fri/two_adic_pcs.rs | 2 +- recursion/program/src/fri/types.rs | 2 +- recursion/program/src/hints.rs | 230 ++++- recursion/program/src/lib.rs | 6 +- recursion/program/src/machine/compress.rs | 475 +++++++++++ recursion/program/src/machine/core.rs | 327 +++++++ recursion/program/src/machine/deferred.rs | 291 +++++++ recursion/program/src/machine/mod.rs | 421 +++++++++ recursion/program/src/machine/root.rs | 139 +++ recursion/program/src/machine/utils.rs | 117 +++ recursion/program/src/reduce.rs | 700 --------------- recursion/program/src/stark.rs | 125 ++- recursion/program/src/types.rs | 4 + recursion/program/src/utils.rs | 108 ++- sdk/src/provers/local.rs | 4 +- 37 files changed, 2814 insertions(+), 1606 deletions(-) create mode 100644 prover/scripts/e2e.rs delete mode 100644 recursion/program/experiments/.gitignore delete mode 100644 recursion/program/experiments/fri_sweep.rs create mode 100644 recursion/program/src/machine/compress.rs create mode 100644 recursion/program/src/machine/core.rs create mode 100644 recursion/program/src/machine/deferred.rs create mode 100644 recursion/program/src/machine/mod.rs create mode 100644 recursion/program/src/machine/root.rs create mode 100644 recursion/program/src/machine/utils.rs delete mode 100644 recursion/program/src/reduce.rs diff --git a/Cargo.lock b/Cargo.lock index fdbfea5a2f..840fdfa832 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4711,6 +4711,7 @@ dependencies = [ "p3-field", "p3-fri", "p3-matrix", + "p3-maybe-rayon", "p3-merkle-tree", "p3-poseidon2", "p3-symmetric", diff --git a/core/src/stark/verifier.rs b/core/src/stark/verifier.rs index fbde0f4267..6f5bad846d 100644 --- a/core/src/stark/verifier.rs +++ b/core/src/stark/verifier.rs @@ -51,6 +51,8 @@ impl>> Verifier { let pcs = config.pcs(); + assert_eq!(chips.len(), opened_values.chips.len()); + let log_degrees = opened_values .chips .iter() diff --git a/prover/scripts/e2e.rs b/prover/scripts/e2e.rs new file mode 100644 index 0000000000..911bf4f113 --- /dev/null +++ b/prover/scripts/e2e.rs @@ -0,0 +1,107 @@ +#![feature(generic_const_exprs)] +#![allow(incomplete_features)] + +use std::borrow::Borrow; + +use clap::Parser; +use p3_baby_bear::BabyBear; +use sp1_core::io::SP1Stdin; +use sp1_prover::utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes}; +use sp1_prover::SP1Prover; +use sp1_recursion_circuit::stark::build_wrap_circuit; +use sp1_recursion_circuit::witness::Witnessable; +use sp1_recursion_compiler::ir::Witness; +use sp1_recursion_core::air::RecursionPublicValues; +use sp1_recursion_gnark_ffi::{convert, verify, Groth16Prover}; +use subtle_encoding::hex; + +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about = None)] +struct Args { + #[clap(short, long)] + build_dir: String, +} + +pub fn main() { + sp1_core::utils::setup_logger(); + std::env::set_var("RECONSTRUCT_COMMITMENTS", "false"); + + let args = Args::parse(); + + let elf = include_bytes!("../../tests/fibonacci/elf/riscv32im-succinct-zkvm-elf"); + + tracing::info!("initializing prover"); + let prover = SP1Prover::new(); + + tracing::info!("setup elf"); + let (pk, vk) = prover.setup(elf); + + tracing::info!("prove core"); + let stdin = SP1Stdin::new(); + let core_proof = prover.prove_core(&pk, &stdin); + + tracing::info!("Compress"); + let reduced_proof = prover.compress(&vk, core_proof, vec![]); + + tracing::info!("Shrink"); + let compressed_proof = prover.shrink(reduced_proof); + + tracing::info!("wrap"); + let wrapped_proof = prover.wrap_bn254(compressed_proof); + + tracing::info!("building verifier constraints"); + let constraints = tracing::info_span!("wrap circuit") + .in_scope(|| build_wrap_circuit(&prover.wrap_vk, wrapped_proof.clone())); + + tracing::info!("building template witness"); + let pv: &RecursionPublicValues<_> = wrapped_proof.public_values.as_slice().borrow(); + let vkey_hash = babybears_to_bn254(&pv.sp1_vk_digest); + let committed_values_digest_bytes: [BabyBear; 32] = words_to_bytes(&pv.committed_value_digest) + .try_into() + .unwrap(); + let committed_values_digest = babybear_bytes_to_bn254(&committed_values_digest_bytes); + + let mut witness = Witness::default(); + wrapped_proof.write(&mut witness); + witness.write_commited_values_digest(committed_values_digest); + witness.write_vkey_hash(vkey_hash); + + tracing::info!("sanity check gnark test"); + Groth16Prover::test(constraints.clone(), witness.clone()); + + tracing::info!("sanity check gnark build"); + Groth16Prover::build( + constraints.clone(), + witness.clone(), + args.build_dir.clone().into(), + ); + + tracing::info!("sanity check gnark prove"); + let groth16_prover = Groth16Prover::new(args.build_dir.clone().into()); + + tracing::info!("gnark prove"); + let proof = groth16_prover.prove(witness.clone()); + + tracing::info!("verify gnark proof"); + let verified = verify(proof.clone(), &args.build_dir.clone().into()); + assert!(verified); + + tracing::info!("convert gnark proof"); + let solidity_proof = convert(proof.clone(), &args.build_dir.clone().into()); + + // tracing::info!("sanity check plonk bn254 build"); + // PlonkBn254Prover::build( + // constraints.clone(), + // witness.clone(), + // args.build_dir.clone().into(), + // ); + + // tracing::info!("sanity check plonk bn254 prove"); + // let proof = PlonkBn254Prover::prove(witness.clone(), args.build_dir.clone().into()); + + println!( + "{:?}", + String::from_utf8(hex::encode(proof.encoded_proof)).unwrap() + ); + println!("solidity proof: {:?}", solidity_proof); +} diff --git a/prover/src/build.rs b/prover/src/build.rs index df6c842506..0c3325e43c 100644 --- a/prover/src/build.rs +++ b/prover/src/build.rs @@ -1,3 +1,4 @@ +use std::borrow::Borrow; use std::path::PathBuf; use p3_baby_bear::BabyBear; @@ -44,7 +45,7 @@ pub fn build_constraints_and_witness( let constraints = tracing::info_span!("wrap circuit") .in_scope(|| build_wrap_circuit(template_vk, template_proof.clone())); - let pv = RecursionPublicValues::from_vec(template_proof.public_values.clone()); + let pv: &RecursionPublicValues = template_proof.public_values.as_slice().borrow(); let vkey_hash = babybears_to_bn254(&pv.sp1_vk_digest); let committed_values_digest_bytes: [BabyBear; 32] = words_to_bytes(&pv.committed_value_digest) .try_into() @@ -80,10 +81,10 @@ pub fn dummy_proof() -> (StarkVerifyingKey, ShardProof) { let compressed_proof = prover.compress(&vk, core_proof, vec![]); tracing::info!("shrink"); - let shrink_proof = prover.shrink(&vk, compressed_proof); + let shrink_proof = prover.shrink(compressed_proof); tracing::info!("wrap"); - let wrapped_proof = prover.wrap_bn254(&vk, shrink_proof); + let wrapped_proof = prover.wrap_bn254(shrink_proof); (prover.wrap_vk, wrapped_proof.proof) } diff --git a/prover/src/lib.rs b/prover/src/lib.rs index 44ad4b7602..5281728cb9 100644 --- a/prover/src/lib.rs +++ b/prover/src/lib.rs @@ -3,7 +3,7 @@ //! Seperates the proof generation process into multiple stages: //! //! 1. Generate shard proofs which split up and prove the valid execution of a RISC-V program. -//! 2. Reduce shard proofs into a single shard proof. +//! 2. Compress shard proofs into a single shard proof. //! 3. Wrap the shard proof into a SNARK-friendly field. //! 4. Wrap the last shard proof, proven over the SNARK-friendly field, into a Groth16/PLONK proof. @@ -18,57 +18,54 @@ mod types; pub mod utils; mod verify; +use std::borrow::Borrow; + +use crate::utils::RECONSTRUCT_COMMITMENTS_ENV_VAR; use p3_baby_bear::BabyBear; use p3_challenger::CanObserve; use p3_field::AbstractField; -use rayon::iter::{IndexedParallelIterator, IntoParallelIterator, ParallelIterator}; -use serde::de::DeserializeOwned; -use serde::Serialize; -use size::Size; +use rayon::iter::{IntoParallelIterator, ParallelIterator}; +use rayon::prelude::*; +use sp1_core::air::PublicValues; pub use sp1_core::io::{SP1PublicValues, SP1Stdin}; use sp1_core::runtime::Runtime; -use sp1_core::stark::{ - Challenge, Com, Domain, PcsProverData, Prover, ShardMainData, StarkProvingKey, -}; +use sp1_core::stark::MachineVerificationError; +use sp1_core::stark::{Challenge, StarkProvingKey}; +use sp1_core::utils::DIGEST_SIZE; use sp1_core::{ runtime::Program, stark::{ - Challenger, LocalProver, RiscvAir, ShardProof, StarkGenericConfig, StarkMachine, - StarkVerifyingKey, Val, + LocalProver, RiscvAir, ShardProof, StarkGenericConfig, StarkMachine, StarkVerifyingKey, Val, }, utils::{run_and_prove, BabyBearPoseidon2}, }; use sp1_primitives::hash_deferred_proof; use sp1_recursion_circuit::witness::Witnessable; +use sp1_recursion_compiler::config::InnerConfig; use sp1_recursion_compiler::config::OuterConfig; use sp1_recursion_compiler::ir::Witness; use sp1_recursion_core::runtime::RecursionProgram; -use sp1_recursion_core::stark::RecursionAirSkinnyDeg7; +use sp1_recursion_core::stark::RecursionAir; use sp1_recursion_core::{ - air::RecursionPublicValues, - runtime::Runtime as RecursionRuntime, - stark::{config::BabyBearPoseidon2Outer, RecursionAirWideDeg3}, + air::RecursionPublicValues, runtime::Runtime as RecursionRuntime, + stark::config::BabyBearPoseidon2Outer, }; pub use sp1_recursion_gnark_ffi::plonk_bn254::PlonkBn254Proof; use sp1_recursion_gnark_ffi::plonk_bn254::PlonkBn254Prover; pub use sp1_recursion_gnark_ffi::Groth16Proof; use sp1_recursion_gnark_ffi::Groth16Prover; use sp1_recursion_program::hints::Hintable; -use sp1_recursion_program::reduce::ReduceProgram; -use sp1_recursion_program::types::QuotientDataValues; +use sp1_recursion_program::machine::{ + ReduceProgramType, SP1CompressVerifier, SP1DeferredMemoryLayout, SP1DeferredVerifier, + SP1RecursionMemoryLayout, SP1RecursiveVerifier, SP1ReduceMemoryLayout, SP1RootMemoryLayout, + SP1RootVerifier, +}; use std::env; use std::path::PathBuf; -use std::time::Instant; use tracing::instrument; pub use types::*; use utils::words_to_bytes; -use crate::types::ReduceState; -use crate::utils::get_chip_quotient_data; -use crate::utils::get_preprocessed_data; -use crate::utils::get_sorted_indices; -use crate::utils::RECONSTRUCT_COMMITMENTS_ENV_VAR; - /// The configuration for the core prover. pub type CoreSC = BabyBearPoseidon2; @@ -78,13 +75,36 @@ pub type InnerSC = BabyBearPoseidon2; /// The configuration for the outer prover. pub type OuterSC = BabyBearPoseidon2Outer; +const REDUCE_DEGREE: usize = 3; +const COMPRESS_DEGREE: usize = 9; +const WRAP_DEGREE: usize = 5; + +pub type ReduceAir = RecursionAir; +pub type CompressAir = RecursionAir; +pub type WrapAir = RecursionAir; + /// A end-to-end prover implementation for SP1. pub struct SP1Prover { /// The program that can recursively verify a set of proofs into a single proof. pub recursion_program: RecursionProgram, - /// The program that sets up memory for the recursion program. - pub recursion_setup_program: RecursionProgram, + /// The proving key for the recursion step. + pub rec_pk: StarkProvingKey, + + /// The verification key for the recursion step. + pub rec_vk: StarkVerifyingKey, + + /// The program that recursively verifies deferred proofs and accumulates the digests. + pub deferred_program: RecursionProgram, + + /// The proving key for the reduce step. + pub deferred_pk: StarkProvingKey, + + /// The verification key for the reduce step. + pub deferred_vk: StarkVerifyingKey, + + /// The program that reduces a set of recursive proofs into a single proof. + pub compress_program: RecursionProgram, /// The proving key for the reduce step. pub compress_pk: StarkProvingKey, @@ -92,12 +112,18 @@ pub struct SP1Prover { /// The verification key for the reduce step. pub compress_vk: StarkVerifyingKey, - /// The proving key for the shrink step. + /// The shrink program that compresses a proof into a succinct proof. + pub shrink_program: RecursionProgram, + + /// The proving key for the compress step. pub shrink_pk: StarkProvingKey, - /// The verification key for the shrink step. + /// The verification key for the compress step. pub shrink_vk: StarkVerifyingKey, + /// The wrap program that wraps a proof into a SNARK-friendly field. + pub wrap_program: RecursionProgram, + /// The proving key for the wrap step. pub wrap_pk: StarkProvingKey, @@ -107,42 +133,65 @@ pub struct SP1Prover { /// The machine used for proving the core step. pub core_machine: StarkMachine::Val>>, - /// The machine used for proving the reduce step. - pub compress_machine: - StarkMachine::Val>>, + /// The machine used for proving the recursive and reduction steps. + pub compress_machine: StarkMachine::Val>>, - /// The machine used for proving the compress step. - pub shrink_machine: - StarkMachine::Val>>, + /// The machine used for proving the shrink step. + pub shrink_machine: StarkMachine::Val>>, /// The machine used for proving the wrapping step. - pub wrap_machine: - StarkMachine::Val>>, + pub wrap_machine: StarkMachine::Val>>, } impl SP1Prover { /// Initializes a new [SP1Prover]. #[instrument(name = "initialize prover", level = "info", skip_all)] pub fn new() -> Self { - let recursion_setup_program = ReduceProgram::setup(); - let recursion_program = ReduceProgram::build(); - let (compress_pk, compress_vk) = - RecursionAirWideDeg3::machine(InnerSC::default()).setup(&recursion_program); - let (shrink_pk, shrink_vk) = - RecursionAirSkinnyDeg7::machine(InnerSC::compressed()).setup(&recursion_program); - let (wrap_pk, wrap_vk) = - RecursionAirSkinnyDeg7::machine(OuterSC::default()).setup(&recursion_program); let core_machine = RiscvAir::machine(CoreSC::default()); - let compress_machine = RecursionAirWideDeg3::machine(InnerSC::default()); - let shrink_machine = RecursionAirSkinnyDeg7::machine(InnerSC::compressed()); - let wrap_machine = RecursionAirSkinnyDeg7::wrap_machine(OuterSC::default()); + + // Get the recursive verifier and setup the proving and verifying keys. + let recursion_program = SP1RecursiveVerifier::::build(&core_machine); + let compress_machine = ReduceAir::machine(InnerSC::default()); + let (rec_pk, rec_vk) = compress_machine.setup(&recursion_program); + + // Get the deferred program and keys. + let deferred_program = SP1DeferredVerifier::::build(&compress_machine); + let (deferred_pk, deferred_vk) = compress_machine.setup(&deferred_program); + + // Make the reduce program and keys. + let compress_program = SP1CompressVerifier::::build( + &compress_machine, + &rec_vk, + &deferred_vk, + ); + let (compress_pk, compress_vk) = compress_machine.setup(&compress_program); + + // Get the compress program, machine, and keys. + let shrink_program = + SP1RootVerifier::::build(&compress_machine, &compress_vk, true); + let shrink_machine = CompressAir::machine(InnerSC::compressed()); + let (shrink_pk, shrink_vk) = shrink_machine.setup(&shrink_program); + + // Get the wrap program, machine, and keys. + let wrap_program = + SP1RootVerifier::::build(&shrink_machine, &shrink_vk, false); + let wrap_machine = WrapAir::wrap_machine(OuterSC::default()); + let (wrap_pk, wrap_vk) = wrap_machine.setup(&wrap_program); + Self { - recursion_setup_program, recursion_program, + rec_pk, + rec_vk, + deferred_program, + deferred_pk, + deferred_vk, + compress_program, compress_pk, compress_vk, + shrink_program, shrink_pk, shrink_vk, + wrap_program, wrap_pk, wrap_vk, core_machine, @@ -166,24 +215,6 @@ impl SP1Prover { (pk, vk) } - /// Accumulate deferred proofs into a single digest. - pub fn hash_deferred_proofs( - prev_digest: [Val; 8], - deferred_proofs: &[ShardProof], - ) -> [Val; 8] { - let mut digest = prev_digest; - for proof in deferred_proofs.iter() { - let pv = RecursionPublicValues::from_vec(proof.public_values.clone()); - let committed_values_digest = words_to_bytes(&pv.committed_value_digest); - digest = hash_deferred_proof( - &digest, - &pv.sp1_vk_digest, - &committed_values_digest.try_into().unwrap(), - ); - } - digest - } - /// Generate a proof of an SP1 program with the specified inputs. #[instrument(name = "execute", level = "info", skip_all)] pub fn execute(elf: &[u8], stdin: &SP1Stdin) -> SP1PublicValues { @@ -200,481 +231,340 @@ impl SP1Prover { /// Generate shard proofs which split up and prove the valid execution of a RISC-V program with /// the core prover. #[instrument(name = "prove_core", level = "info", skip_all)] - pub fn prove_core( - &self, - pk: &SP1ProvingKey, - stdin: &SP1Stdin, - ) -> SP1ProofWithMetadata { + pub fn prove_core(&self, pk: &SP1ProvingKey, stdin: &SP1Stdin) -> SP1CoreProof { let config = CoreSC::default(); let program = Program::from(&pk.elf); let (proof, public_values_stream) = run_and_prove(program, stdin, config); let public_values = SP1PublicValues::from(&public_values_stream); - SP1ProofWithMetadata { + SP1CoreProof { proof: SP1CoreProofData(proof.shard_proofs), stdin: stdin.clone(), public_values, } } - /// Compress shards proofs to a single shard proof using the recursion prover. + /// Reduce shards proofs to a single shard proof using the recursion prover. #[instrument(name = "compress", level = "info", skip_all)] pub fn compress( &self, vk: &SP1VerifyingKey, - proof: SP1ProofWithMetadata, - mut deferred_proofs: Vec>, + proof: SP1CoreProof, + deferred_proofs: Vec>, ) -> SP1ReduceProof { - // Observe all commitments and public values. - // - // This challenger will be witnessed into reduce program and used to verify sp1 proofs. It - // will also be reconstructed over all the reduce steps to prove that the witnessed - // challenger was correct. - let mut core_challenger = self.core_machine.config().challenger(); - vk.vk.observe_into(&mut core_challenger); - for shard_proof in proof.proof.0.iter() { - core_challenger.observe(shard_proof.commitment.main_commit); - core_challenger.observe_slice( - &shard_proof.public_values.to_vec()[0..self.core_machine.num_pv_elts()], - ); + // Set the batch size for the reduction tree. + let batch_size = 2; + + let shard_proofs = &proof.proof.0; + + // Setup the reconstruct commitments flags to false and save its state. + let rc = env::var(RECONSTRUCT_COMMITMENTS_ENV_VAR).unwrap_or_default(); + env::set_var(RECONSTRUCT_COMMITMENTS_ENV_VAR, "false"); + + // Get the leaf challenger. + let mut leaf_challenger = self.core_machine.config().challenger(); + vk.vk.observe_into(&mut leaf_challenger); + shard_proofs.iter().for_each(|proof| { + leaf_challenger.observe(proof.commitment.main_commit); + leaf_challenger.observe_slice(&proof.public_values[0..self.core_machine.num_pv_elts()]); + }); + // Make sure leaf challenger is not mutable anymore. + let leaf_challenger = leaf_challenger; + + let mut core_inputs = Vec::new(); + + let mut reconstruct_challenger = self.core_machine.config().challenger(); + vk.vk.observe_into(&mut reconstruct_challenger); + + // Prepare the inputs for the recursion programs. + let is_complete = shard_proofs.len() == 1 && deferred_proofs.is_empty(); + for batch in shard_proofs.chunks(batch_size) { + let proofs = batch.to_vec(); + + core_inputs.push(SP1RecursionMemoryLayout { + vk: &vk.vk, + machine: &self.core_machine, + shard_proofs: proofs, + leaf_challenger: &leaf_challenger, + initial_reconstruct_challenger: reconstruct_challenger.clone(), + is_complete, + }); + + for proof in batch.iter() { + reconstruct_challenger.observe(proof.commitment.main_commit); + reconstruct_challenger + .observe_slice(&proof.public_values[0..self.core_machine.num_pv_elts()]); + } } - // Map the existing shards to a self-reducing type of proof (i.e. Reduce: T[] -> T). - let mut reduce_proofs = proof - .proof - .0 - .into_iter() - .map(|proof| SP1ReduceProofWrapper::Core(SP1ReduceProof { proof })) - .collect::>(); + let last_proof_input = + PublicValues::from_vec(shard_proofs.last().unwrap().public_values.clone()); - // Keep reducing until we have only one shard. - while reduce_proofs.len() > 1 { - let layer_deferred_proofs = std::mem::take(&mut deferred_proofs); - reduce_proofs = self.reduce_layer( - vk, - core_challenger.clone(), - reduce_proofs, - layer_deferred_proofs, - 2, - ); + // Check that the leaf challenger is the same as the reconstruct challenger. + assert_eq!( + reconstruct_challenger.sponge_state, + leaf_challenger.sponge_state + ); + assert_eq!( + reconstruct_challenger.input_buffer, + leaf_challenger.input_buffer + ); + assert_eq!( + reconstruct_challenger.output_buffer, + leaf_challenger.output_buffer + ); + + // Prepare the inputs for the deferred proofs recursive verification. + let mut deferred_digest = [Val::::zero(); DIGEST_SIZE]; + let mut deferred_inputs = Vec::new(); + + let is_deferred_complete = shard_proofs.is_empty() && deferred_proofs.len() == 1; + + for batch in deferred_proofs.chunks(batch_size) { + let proofs = batch.to_vec(); + + deferred_inputs.push(SP1DeferredMemoryLayout { + compress_vk: &self.compress_vk, + machine: &self.compress_machine, + proofs, + start_reconstruct_deferred_digest: deferred_digest.to_vec(), + is_complete: is_deferred_complete, + sp1_vk: &vk.vk, + sp1_machine: &self.core_machine, + end_pc: Val::::zero(), + end_shard: Val::::from_canonical_usize(shard_proofs.len()), + leaf_challenger: leaf_challenger.clone(), + committed_value_digest: last_proof_input.committed_value_digest.to_vec(), + deferred_proofs_digest: last_proof_input.deferred_proofs_digest.to_vec(), + }); + + deferred_digest = Self::hash_deferred_proofs(deferred_digest, batch); } - // Return the remaining single reduce proof. If we have only one shard, we still want to - // wrap it into a reduce shard. - assert_eq!(reduce_proofs.len(), 1); - let last_proof = reduce_proofs.into_iter().next().unwrap(); - match last_proof { - SP1ReduceProofWrapper::Recursive(proof) => proof, - SP1ReduceProofWrapper::Core(ref proof) => { - let state = ReduceState::from_core_start_state(&proof.proof); - let reconstruct_challenger = self.setup_initial_core_challenger(vk); - let config = InnerSC::default(); - self.verify_batch( - config, - &self.compress_pk, - vk, - core_challenger, - reconstruct_challenger, - state, - &[last_proof], - &deferred_proofs, - true, - false, - false, - ) - } + // Run the recursion and reduce programs. + + // Run the recursion programs. + let mut records = Vec::new(); + + for input in core_inputs { + let mut runtime = RecursionRuntime::, Challenge, _>::new( + &self.recursion_program, + self.compress_machine.config().perm.clone(), + ); + + let mut witness_stream = Vec::new(); + witness_stream.extend(input.write()); + + runtime.witness_stream = witness_stream.into(); + runtime.run(); + runtime.print_stats(); + + records.push((runtime.record, ReduceProgramType::Core)); } - } - /// Reduce a set of shard proofs in groups of `batch_size` into a smaller set of shard proofs - /// using the recursion prover. - #[instrument(name = "reduce_layer", level = "info", skip_all)] - fn reduce_layer( - &self, - vk: &SP1VerifyingKey, - sp1_challenger: Challenger, - proofs: Vec, - deferred_proofs: Vec>, - batch_size: usize, - ) -> Vec { - // OPT: If there's only one proof in the last batch, we could push it to the next layer. - // OPT: We could pack deferred proofs into the last chunk if it has less than batch_size proofs. - let chunks: Vec<_> = proofs.chunks(batch_size).collect(); - - let mut reconstruct_challenger = self.setup_initial_core_challenger(vk); - let reconstruct_challengers = chunks - .iter() - .map(|proofs| { - let start_challenger = reconstruct_challenger.clone(); - for proof in proofs.iter() { - match proof { - SP1ReduceProofWrapper::Core(reduce_proof) => { - reconstruct_challenger - .observe(reduce_proof.proof.commitment.main_commit); - reconstruct_challenger.observe_slice( - &reduce_proof.proof.public_values.to_vec() - [0..self.core_machine.num_pv_elts()], - ); - } - SP1ReduceProofWrapper::Recursive(reduce_proof) => { - let pv = RecursionPublicValues::from_vec( - reduce_proof.proof.public_values.clone(), - ); - pv.end_reconstruct_challenger - .set_challenger(&mut reconstruct_challenger); - } - } - } - start_challenger - }) - .collect::>(); - let start_states = chunks - .iter() - .map(|chunk| match chunk[0] { - SP1ReduceProofWrapper::Core(ref proof) => { - ReduceState::from_core_start_state(&proof.proof) - } - SP1ReduceProofWrapper::Recursive(ref proof) => { - ReduceState::from_reduce_start_state(proof) - } - }) - .collect::>(); + // Run the deferred proofs programs. + for input in deferred_inputs { + let mut runtime = RecursionRuntime::, Challenge, _>::new( + &self.deferred_program, + self.compress_machine.config().perm.clone(), + ); - // This is the last layer only if the outcome is a single proof. If there are deferred - // proofs, it's not the last layer. - let is_complete = chunks.len() == 1 && deferred_proofs.is_empty(); - let mut new_proofs: Vec = chunks - .into_par_iter() - .zip(reconstruct_challengers.into_par_iter()) - .zip(start_states.into_par_iter()) - .map(|((chunk, reconstruct_challenger), start_state)| { - let config = InnerSC::default(); - let proof = self.verify_batch( - config, - &self.compress_pk, - vk, - sp1_challenger.clone(), - reconstruct_challenger, - start_state, - chunk, - &[], - is_complete, - false, - false, - ); - SP1ReduceProofWrapper::Recursive(proof) - }) - .collect(); - - // If there are deferred proofs, we want to add them to the end. - // Here we get the end state of the last proof from above which will be the start state for - // the deferred proofs. When verifying only deferred proofs, only reconstruct_deferred_digests - // should change. - let last_new_proof = &new_proofs[new_proofs.len() - 1]; - let mut reduce_state: ReduceState = match last_new_proof { - SP1ReduceProofWrapper::Recursive(ref proof) => { - ReduceState::from_reduce_end_state(proof) - } - _ => unreachable!(), - }; - let deferred_chunks: Vec<_> = deferred_proofs.chunks(batch_size).collect(); + let mut witness_stream = Vec::new(); + witness_stream.extend(input.write()); - // For each reduce, we need to pass in the start state from the previous proof. Here we - // need to compute updated reconstruct_deferred_digests since each proof is modifying it. - let start_states = deferred_chunks - .iter() - .map(|chunk| { - let start_state = reduce_state.clone(); - // Accumulate each deferred proof into the digest - reduce_state.reconstruct_deferred_digest = - Self::hash_deferred_proofs(reduce_state.reconstruct_deferred_digest, chunk); - start_state - }) - .collect::>(); + runtime.witness_stream = witness_stream.into(); + runtime.run(); + runtime.print_stats(); - let new_deferred_proofs = deferred_chunks + records.push((runtime.record, ReduceProgramType::Deferred)); + } + + // Prove all recursion programs and recursion deferred programs and verify the proofs. + + // Make the recursive proofs for core and deferred proofs. + let first_layer_proofs = records .into_par_iter() - .zip(start_states.into_par_iter()) - .map(|(proofs, state)| { - let config = InnerSC::default(); - self.verify_batch::( - config, - &self.compress_pk, - vk, - sp1_challenger.clone(), - reconstruct_challenger.clone(), - state, - &[], - proofs, - false, - false, - false, + .map(|(record, kind)| { + let pk = match kind { + ReduceProgramType::Core => &self.rec_pk, + ReduceProgramType::Deferred => &self.deferred_pk, + ReduceProgramType::Reduce => unreachable!(), + }; + let mut recursive_challenger = self.compress_machine.config().challenger(); + ( + self.compress_machine.prove::>( + pk, + record, + &mut recursive_challenger, + ), + kind, ) }) .collect::>(); - new_proofs.extend( - new_deferred_proofs - .into_iter() - .map(SP1ReduceProofWrapper::Recursive), - ); - new_proofs + // Chain all the individual shard proofs. + let mut reduce_proofs = first_layer_proofs + .into_iter() + .flat_map(|(proof, kind)| proof.shard_proofs.into_iter().map(move |p| (p, kind))) + .collect::>(); + + // Iterate over the recursive proof batches until there is one proof remaining. + let mut is_complete; + loop { + tracing::debug!("Recursive proof layer size: {}", reduce_proofs.len()); + is_complete = reduce_proofs.len() <= batch_size; + reduce_proofs = reduce_proofs + .par_chunks(batch_size) + .map(|batch| { + let (shard_proofs, kinds) = + batch.iter().cloned().unzip::<_, _, Vec<_>, Vec<_>>(); + + let input = SP1ReduceMemoryLayout { + compress_vk: &self.compress_vk, + recursive_machine: &self.compress_machine, + shard_proofs, + kinds, + is_complete, + }; + + let mut runtime = RecursionRuntime::, Challenge, _>::new( + &self.compress_program, + self.compress_machine.config().perm.clone(), + ); + + let mut witness_stream = Vec::new(); + witness_stream.extend(input.write()); + + runtime.witness_stream = witness_stream.into(); + runtime.run(); + runtime.print_stats(); + + let mut recursive_challenger = self.compress_machine.config().challenger(); + let mut proof = self.compress_machine.prove::>( + &self.compress_pk, + runtime.record, + &mut recursive_challenger, + ); + + debug_assert_eq!(proof.shard_proofs.len(), 1); + (proof.shard_proofs.pop().unwrap(), ReduceProgramType::Reduce) + }) + .collect(); + + if reduce_proofs.len() == 1 { + break; + } + } + debug_assert_eq!(reduce_proofs.len(), 1); + let reduce_proof = reduce_proofs.pop().unwrap(); + + // Restore the prover parameters. + env::set_var(RECONSTRUCT_COMMITMENTS_ENV_VAR, rc); + + SP1ReduceProof { + proof: reduce_proof.0, + } } - /// Verifies a batch of proofs using the recursion prover. - #[instrument(name = "verify_batch", level = "info", skip_all)] - fn verify_batch( - &self, - config: SC, - pk: &StarkProvingKey, - core_vk: &SP1VerifyingKey, - core_challenger: Challenger, - reconstruct_challenger: Challenger, - state: ReduceState, - reduce_proofs: &[SP1ReduceProofWrapper], - deferred_proofs: &[ShardProof], - is_complete: bool, - verifying_compressed_proof: bool, - proving_with_skinny: bool, - ) -> SP1ReduceProof - where - SC: StarkGenericConfig, - SC::Challenger: Clone, - Com: Send + Sync, - PcsProverData: Send + Sync, - ShardMainData: Serialize + DeserializeOwned, - LocalProver>: - Prover>, - LocalProver>: Prover>, - { + /// Wrap a reduce proof into a STARK proven over a SNARK-friendly field. + #[instrument(name = "shrink", level = "info", skip_all)] + pub fn shrink(&self, reduced_proof: SP1ReduceProof) -> SP1ReduceProof { // Setup the prover parameters. let rc = env::var(RECONSTRUCT_COMMITMENTS_ENV_VAR).unwrap_or_default(); env::set_var(RECONSTRUCT_COMMITMENTS_ENV_VAR, "false"); - // Compute inputs. - let is_recursive_flags: Vec = reduce_proofs - .iter() - .map(|p| match p { - SP1ReduceProofWrapper::Core(_) => 0, - SP1ReduceProofWrapper::Recursive(_) => 1, - }) - .collect(); - let chip_quotient_data: Vec> = reduce_proofs - .iter() - .map(|p| match p { - SP1ReduceProofWrapper::Core(reduce_proof) => { - get_chip_quotient_data(&self.core_machine, &reduce_proof.proof) - } - SP1ReduceProofWrapper::Recursive(reduce_proof) => { - if verifying_compressed_proof { - get_chip_quotient_data(&self.shrink_machine, &reduce_proof.proof) - } else { - get_chip_quotient_data(&self.compress_machine, &reduce_proof.proof) - } - } - }) - .collect(); - let sorted_indices: Vec> = reduce_proofs - .iter() - .map(|p| match p { - SP1ReduceProofWrapper::Core(reduce_proof) => { - get_sorted_indices(&self.core_machine, &reduce_proof.proof) - } - SP1ReduceProofWrapper::Recursive(reduce_proof) => { - if verifying_compressed_proof { - get_sorted_indices(&self.shrink_machine, &reduce_proof.proof) - } else { - get_sorted_indices(&self.compress_machine, &reduce_proof.proof) - } - } - }) - .collect(); - let (prep_sorted_indices, prep_domains): (Vec, Vec>) = - get_preprocessed_data(&self.core_machine, &core_vk.vk); - let (reduce_prep_sorted_indices, reduce_prep_domains): (Vec, Vec>) = - get_preprocessed_data(&self.compress_machine, &self.compress_vk); - let (compress_prep_sorted_indices, compress_prep_domains): ( - Vec, - Vec>, - ) = get_preprocessed_data(&self.shrink_machine, &self.shrink_vk); - let deferred_sorted_indices: Vec> = deferred_proofs - .iter() - .map(|proof| get_sorted_indices(&self.compress_machine, proof)) - .collect(); - let deferred_chip_quotient_data: Vec> = deferred_proofs - .iter() - .map(|p| get_chip_quotient_data(&self.compress_machine, p)) - .collect(); - - // Convert the inputs into a witness stream. - let mut witness_stream = Vec::new(); - witness_stream.extend(is_recursive_flags.write()); - witness_stream.extend(chip_quotient_data.write()); - witness_stream.extend(sorted_indices.write()); - witness_stream.extend(core_challenger.write()); - witness_stream.extend(reconstruct_challenger.write()); - witness_stream.extend(prep_sorted_indices.write()); - witness_stream.extend(Hintable::write(&prep_domains)); - witness_stream.extend(reduce_prep_sorted_indices.write()); - witness_stream.extend(Hintable::write(&reduce_prep_domains)); - witness_stream.extend(compress_prep_sorted_indices.write()); - witness_stream.extend(Hintable::write(&compress_prep_domains)); - witness_stream.extend(core_vk.vk.write()); - witness_stream.extend(self.compress_vk.write()); - witness_stream.extend(self.shrink_vk.write()); - witness_stream.extend(state.committed_values_digest.write()); - witness_stream.extend(state.deferred_proofs_digest.write()); - witness_stream.extend(Hintable::write(&state.start_pc)); - witness_stream.extend(Hintable::write(&state.exit_code)); - witness_stream.extend(Hintable::write(&state.start_shard)); - witness_stream.extend(Hintable::write(&state.reconstruct_deferred_digest)); - for proof in reduce_proofs.iter() { - match proof { - SP1ReduceProofWrapper::Core(reduce_proof) => { - witness_stream.extend(reduce_proof.proof.write()); - } - SP1ReduceProofWrapper::Recursive(reduce_proof) => { - witness_stream.extend(reduce_proof.proof.write()); - } - } - } - witness_stream.extend(deferred_chip_quotient_data.write()); - witness_stream.extend(deferred_sorted_indices.write()); - witness_stream.extend(deferred_proofs.to_vec().write()); - let is_complete = if is_complete { 1usize } else { 0 }; - witness_stream.extend(is_complete.write()); - let is_compressed = if verifying_compressed_proof { - 1usize - } else { - 0 + // Make the compress proof. + let input = SP1RootMemoryLayout { + machine: &self.compress_machine, + proof: reduced_proof.proof, + is_reduce: true, }; - witness_stream.extend(is_compressed.write()); - let machine = RecursionAirWideDeg3::machine(InnerSC::default()); + // Run the compress program. let mut runtime = RecursionRuntime::, Challenge, _>::new( - &self.recursion_setup_program, - machine.config().perm.clone(), + &self.shrink_program, + self.shrink_machine.config().perm.clone(), ); - runtime.witness_stream = witness_stream.into(); - runtime.run(); - let mut checkpoint = runtime.memory.clone(); - let checkpoint_uninit = runtime.uninitialized_memory.clone(); - // Execute runtime. - let machine = RecursionAirWideDeg3::machine(InnerSC::default()); - let mut runtime = RecursionRuntime::, Challenge, _>::new( - &self.recursion_program, - machine.config().perm.clone(), - ); - checkpoint.iter_mut().for_each(|e| { - e.1.timestamp = BabyBear::zero(); - }); - runtime.memory = checkpoint; - runtime.uninitialized_memory = checkpoint_uninit; + let mut witness_stream = Vec::new(); + witness_stream.extend(input.write()); + + runtime.witness_stream = witness_stream.into(); runtime.run(); runtime.print_stats(); - tracing::info!( - "runtime summary: cycles={}, nb_poseidons={}", - runtime.timestamp, - runtime.nb_poseidons - ); + tracing::debug!("Compress program executed successfully"); - // Generate proof. - let start = Instant::now(); - let proof = if proving_with_skinny && verifying_compressed_proof { - let machine = RecursionAirSkinnyDeg7::wrap_machine(config); - let mut challenger = machine.config().challenger(); - machine.prove::>(pk, runtime.record.clone(), &mut challenger) - } else if proving_with_skinny { - let machine = RecursionAirSkinnyDeg7::machine(config); - let mut challenger = machine.config().challenger(); - machine.prove::>(pk, runtime.record.clone(), &mut challenger) - } else { - let machine = RecursionAirWideDeg3::machine(config); - let mut challenger = machine.config().challenger(); - machine.prove::>(pk, runtime.record.clone(), &mut challenger) - }; - let elapsed = start.elapsed().as_secs_f64(); - - let proof_size = bincode::serialize(&proof).unwrap().len(); - tracing::info!( - "proving summary: cycles={}, e2e={}, khz={:.2}, proofSize={}", - runtime.timestamp, - elapsed, - (runtime.timestamp as f64 / elapsed) / 1000f64, - Size::from_bytes(proof_size), + // Prove the compress program. + let mut compress_challenger = self.shrink_machine.config().challenger(); + let mut compress_proof = self.shrink_machine.prove::>( + &self.shrink_pk, + runtime.record, + &mut compress_challenger, ); // Restore the prover parameters. env::set_var(RECONSTRUCT_COMMITMENTS_ENV_VAR, rc); - // Return the reduced proof. - assert!(proof.shard_proofs.len() == 1); - let proof = proof.shard_proofs.into_iter().next().unwrap(); - SP1ReduceProof { proof } - } - - /// Shrink a compressed proof into a STARK proven over a SNARK-friendly field. - #[instrument(name = "shrink", level = "info", skip_all)] - pub fn shrink( - &self, - vk: &SP1VerifyingKey, - reduced_proof: SP1ReduceProof, - ) -> SP1ReduceProof { - // Get verify_start_challenger from the reduce proof's public values. - let pv = RecursionPublicValues::from_vec(reduced_proof.proof.public_values.clone()); - let mut core_challenger = self.core_machine.config().challenger(); - pv.verify_start_challenger - .set_challenger(&mut core_challenger); - // Since the proof passed in should be complete already, the start reconstruct_challenger - // should be in initial state with only vk observed. - let reconstruct_challenger = self.setup_initial_core_challenger(vk); - let state = ReduceState::from_reduce_start_state(&reduced_proof); - let config = InnerSC::compressed(); - self.verify_batch::( - config, - &self.shrink_pk, - vk, - core_challenger, - reconstruct_challenger, - state, - &[SP1ReduceProofWrapper::Recursive(reduced_proof)], - &[], - true, - false, - true, - ) + SP1ReduceProof { + proof: compress_proof.shard_proofs.pop().unwrap(), + } } /// Wrap a reduce proof into a STARK proven over a SNARK-friendly field. #[instrument(name = "wrap_bn254", level = "info", skip_all)] - pub fn wrap_bn254( - &self, - vk: &SP1VerifyingKey, - reduced_proof: SP1ReduceProof, - ) -> SP1ReduceProof { - // Get verify_start_challenger from the reduce proof's public values. - let pv = RecursionPublicValues::from_vec(reduced_proof.proof.public_values.clone()); - let mut core_challenger = self.core_machine.config().challenger(); - pv.verify_start_challenger - .set_challenger(&mut core_challenger); - // Since the proof passed in should be complete already, the start reconstruct_challenger - // should be in initial state with only vk observed. - let reconstruct_challenger = self.setup_initial_core_challenger(vk); - let state = ReduceState::from_reduce_start_state(&reduced_proof); - let config = OuterSC::default(); - self.verify_batch::( - config, + pub fn wrap_bn254(&self, compressed_proof: SP1ReduceProof) -> SP1ReduceProof { + // Setup the prover parameters. + let rc = env::var(RECONSTRUCT_COMMITMENTS_ENV_VAR).unwrap_or_default(); + env::set_var(RECONSTRUCT_COMMITMENTS_ENV_VAR, "false"); + + let input = SP1RootMemoryLayout { + machine: &self.shrink_machine, + proof: compressed_proof.proof, + is_reduce: false, + }; + + // Run the compress program. + let mut runtime = RecursionRuntime::, Challenge, _>::new( + &self.wrap_program, + self.shrink_machine.config().perm.clone(), + ); + + let mut witness_stream = Vec::new(); + witness_stream.extend(input.write()); + + runtime.witness_stream = witness_stream.into(); + runtime.run(); + runtime.print_stats(); + tracing::debug!("Wrap program executed successfully"); + + // Prove the wrap program. + let mut wrap_challenger = self.wrap_machine.config().challenger(); + let time = std::time::Instant::now(); + let mut wrap_proof = self.wrap_machine.prove::>( &self.wrap_pk, - vk, - core_challenger, - reconstruct_challenger, - state, - &[SP1ReduceProofWrapper::Recursive(reduced_proof)], - &[], - true, - true, - true, - ) + runtime.record, + &mut wrap_challenger, + ); + let elapsed = time.elapsed(); + tracing::debug!("Wrap proving time: {:?}", elapsed); + let mut wrap_challenger = self.wrap_machine.config().challenger(); + let result = self + .wrap_machine + .verify(&self.wrap_vk, &wrap_proof, &mut wrap_challenger); + match result { + Ok(_) => tracing::info!("Proof verified successfully"), + Err(MachineVerificationError::NonZeroCumulativeSum) => { + tracing::info!("Proof verification failed: NonZeroCumulativeSum") + } + e => panic!("Proof verification failed: {:?}", e), + } + tracing::info!("Wrapping successful"); + + // Restore the prover parameters. + env::set_var(RECONSTRUCT_COMMITMENTS_ENV_VAR, rc); + + SP1ReduceProof { + proof: wrap_proof.shard_proofs.pop().unwrap(), + } } /// Wrap the STARK proven over a SNARK-friendly field into a Groth16 proof. @@ -709,25 +599,22 @@ impl SP1Prover { PlonkBn254Prover::prove(witness, build_dir) } - pub fn setup_initial_core_challenger(&self, vk: &SP1VerifyingKey) -> Challenger { - let mut core_challenger = self.core_machine.config().challenger(); - vk.vk.observe_into(&mut core_challenger); - core_challenger - } - - pub fn setup_core_challenger( - &self, - vk: &SP1VerifyingKey, - proof: &SP1CoreProofData, - ) -> Challenger { - let mut core_challenger = self.setup_initial_core_challenger(vk); - for shard_proof in proof.0.iter() { - core_challenger.observe(shard_proof.commitment.main_commit); - core_challenger.observe_slice( - &shard_proof.public_values.to_vec()[0..self.core_machine.num_pv_elts()], + /// Accumulate deferred proofs into a single digest. + fn hash_deferred_proofs( + prev_digest: [Val; DIGEST_SIZE], + deferred_proofs: &[ShardProof], + ) -> [Val; 8] { + let mut digest = prev_digest; + for proof in deferred_proofs.iter() { + let pv: &RecursionPublicValues> = proof.public_values.as_slice().borrow(); + let committed_values_digest = words_to_bytes(&pv.committed_value_digest); + digest = hash_deferred_proof( + &digest, + &pv.sp1_vk_digest, + &committed_values_digest.try_into().unwrap(), ); } - core_challenger + digest } } @@ -743,13 +630,10 @@ mod tests { use p3_field::PrimeField32; use serial_test::serial; use sp1_core::io::SP1Stdin; - use sp1_core::stark::MachineVerificationError; use sp1_core::utils::setup_logger; /// Tests an end-to-end workflow of proving a program across the entire proof generation /// pipeline. - /// - /// TODO: Remove the fact that we ignore [MachineVerificationError::NonZeroCumulativeSum]. #[test] #[serial] fn test_e2e() { @@ -773,26 +657,16 @@ mod tests { let compressed_proof = prover.compress(&vk, core_proof, vec![]); tracing::info!("verify compressed"); - let result = prover.verify_compressed(&compressed_proof, &vk); - if let Err(MachineVerificationError::NonZeroCumulativeSum) = result { - tracing::warn!("non-zero cumulative sum for compress"); - } else { - result.unwrap(); - } + prover.verify_compressed(&compressed_proof, &vk).unwrap(); tracing::info!("shrink"); - let shrink_proof = prover.shrink(&vk, compressed_proof); + let shrink_proof = prover.shrink(compressed_proof); tracing::info!("verify shrink"); - let result = prover.verify_shrink(&shrink_proof, &vk); - if let Err(MachineVerificationError::NonZeroCumulativeSum) = result { - tracing::warn!("non-zero cumulative sum for shrink"); - } else { - result.unwrap(); - } + prover.verify_shrink(&shrink_proof, &vk).unwrap(); tracing::info!("wrap bn254"); - let wrapped_bn254_proof = prover.wrap_bn254(&vk, shrink_proof); + let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof); let bytes = bincode::serialize(&wrapped_bn254_proof).unwrap(); // Save the proof. @@ -807,12 +681,7 @@ mod tests { let wrapped_bn254_proof = bincode::deserialize(&bytes).unwrap(); tracing::info!("verify wrap bn254"); - let result = prover.verify_wrap_bn254(&wrapped_bn254_proof, &vk); - if let Err(MachineVerificationError::NonZeroCumulativeSum) = result { - tracing::warn!("non-zero cumulative sum for wrap bn254"); - } else { - result.unwrap(); - } + prover.verify_wrap_bn254(&wrapped_bn254_proof, &vk).unwrap(); tracing::info!("checking vkey hash babybear"); let vk_digest_babybear = wrapped_bn254_proof.sp1_vkey_digest_babybear(); @@ -831,8 +700,6 @@ mod tests { /// Tests an end-to-end workflow of proving a program across the entire proof generation /// pipeline in addition to verifying deferred proofs. - /// - /// TODO: Remove the fact that we ignore [MachineVerificationError::NonZeroCumulativeSum]. #[test] #[serial] fn test_e2e_with_deferred_proofs() { @@ -907,13 +774,14 @@ mod tests { deferred_reduce_2.proof, ], ); + let reduce_pv: &RecursionPublicValues<_> = + verify_reduce.proof.public_values.as_slice().borrow(); + println!("deferred_hash: {:?}", reduce_pv.deferred_proofs_digest); + println!("complete: {:?}", reduce_pv.is_complete); tracing::info!("verify verify program"); - let result = prover.verify_compressed(&verify_reduce, &verify_vk); - if let Err(MachineVerificationError::NonZeroCumulativeSum) = result { - tracing::warn!("non-zero cumulative sum for verify"); - } else { - result.unwrap(); - } + prover + .verify_compressed(&verify_reduce, &verify_vk) + .unwrap(); } } diff --git a/prover/src/types.rs b/prover/src/types.rs index 9f9dbc86d2..547eac7707 100644 --- a/prover/src/types.rs +++ b/prover/src/types.rs @@ -1,3 +1,4 @@ +use std::borrow::Borrow; use std::{fs::File, path::Path}; use anyhow::Result; @@ -8,9 +9,8 @@ use p3_field::PrimeField; use p3_field::{AbstractField, PrimeField32, TwoAdicField}; use serde::{de::DeserializeOwned, Deserialize, Serialize}; use sp1_core::{ - air::{PublicValues, Word, POSEIDON_NUM_WORDS, PV_DIGEST_NUM_WORDS}, io::{SP1PublicValues, SP1Stdin}, - stark::{ShardProof, StarkGenericConfig, StarkProvingKey, StarkVerifyingKey, Val}, + stark::{ShardProof, StarkGenericConfig, StarkProvingKey, StarkVerifyingKey}, utils::DIGEST_SIZE, }; use sp1_primitives::poseidon2_hash; @@ -37,7 +37,11 @@ pub struct SP1VerifyingKey { /// A trait for keys that can be hashed into a digest. pub trait HashableKey { - fn hash_babybear(&self) -> [BabyBear; 8]; + /// Hash the key into a digest of BabyBear elements. + fn hash_babybear(&self) -> [BabyBear; DIGEST_SIZE]; + + /// Hash the key into a digest of u32 elements. + fn hash_u32(&self) -> [u32; DIGEST_SIZE]; fn hash_bn254(&self) -> Bn254Fr { babybears_to_bn254(&self.hash_babybear()) @@ -51,20 +55,18 @@ pub trait HashableKey { ) } - fn hash_u32(&self) -> [u32; 8]; - - /// Hash the key into a digest of 8 u32 elements. - fn hash_bytes(&self) -> [u8; 32] { + /// Hash the key into a digest of bytes elements. + fn hash_bytes(&self) -> [u8; DIGEST_SIZE * 4] { words_to_bytes_be(&self.hash_u32()) } } impl HashableKey for SP1VerifyingKey { - fn hash_babybear(&self) -> [BabyBear; 8] { + fn hash_babybear(&self) -> [BabyBear; DIGEST_SIZE] { self.vk.hash_babybear() } - fn hash_u32(&self) -> [u32; 8] { + fn hash_u32(&self) -> [u32; DIGEST_SIZE] { self.vk.hash_u32() } } @@ -74,7 +76,7 @@ impl>::Commitment: AsRef<[BabyBear; DIGEST_SIZE]>, { - fn hash_babybear(&self) -> [BabyBear; 8] { + fn hash_babybear(&self) -> [BabyBear; DIGEST_SIZE] { let prep_domains = self.chip_information.iter().map(|(_, domain, _)| domain); let num_inputs = DIGEST_SIZE + 1 + (4 * prep_domains.len()); let mut inputs = Vec::with_capacity(num_inputs); @@ -164,29 +166,10 @@ pub struct SP1ReduceProof { pub proof: ShardProof, } -/// A proof that can be reduced along with other proofs into one proof. -#[derive(Serialize, Deserialize)] -pub enum SP1ReduceProofWrapper { - Core(SP1ReduceProof), - Recursive(SP1ReduceProof), -} - -/// Represents the state of reducing proofs together. This is used to track the current values since -/// some reduce batches may have only deferred proofs. -#[derive(Clone)] -pub(crate) struct ReduceState { - pub committed_values_digest: [Word>; PV_DIGEST_NUM_WORDS], - pub deferred_proofs_digest: [Val; POSEIDON_NUM_WORDS], - pub start_pc: Val, - pub exit_code: Val, - pub start_shard: Val, - pub reconstruct_deferred_digest: [Val; POSEIDON_NUM_WORDS], -} - impl SP1ReduceProof { pub fn sp1_vkey_digest_babybear(&self) -> [BabyBear; 8] { let proof = &self.proof; - let pv = RecursionPublicValues::from_vec(proof.public_values.clone()); + let pv: &RecursionPublicValues = proof.public_values.as_slice().borrow(); pv.sp1_vk_digest } @@ -196,7 +179,7 @@ impl SP1ReduceProof { pub fn sp1_commited_values_digest_bn254(&self) -> Bn254Fr { let proof = &self.proof; - let pv = RecursionPublicValues::from_vec(proof.public_values.clone()); + let pv: &RecursionPublicValues = proof.public_values.as_slice().borrow(); let committed_values_digest_bytes: [BabyBear; 32] = words_to_bytes(&pv.committed_value_digest) .try_into() @@ -205,46 +188,9 @@ impl SP1ReduceProof { } } -impl ReduceState { - pub fn from_reduce_end_state>( - state: &SP1ReduceProof, - ) -> Self { - let pv = RecursionPublicValues::from_vec(state.proof.public_values.clone()); - Self { - committed_values_digest: pv.committed_value_digest, - deferred_proofs_digest: pv.deferred_proofs_digest, - start_pc: pv.next_pc, - exit_code: pv.exit_code, - start_shard: pv.next_shard, - reconstruct_deferred_digest: pv.end_reconstruct_deferred_digest, - } - } - - pub fn from_reduce_start_state>( - state: &SP1ReduceProof, - ) -> Self { - let pv = RecursionPublicValues::from_vec(state.proof.public_values.clone()); - Self { - committed_values_digest: pv.committed_value_digest, - deferred_proofs_digest: pv.deferred_proofs_digest, - start_pc: pv.start_pc, - exit_code: pv.exit_code, - start_shard: pv.start_shard, - reconstruct_deferred_digest: pv.start_reconstruct_deferred_digest, - } - } - - pub fn from_core_start_state(state: &ShardProof) -> Self { - let pv = - PublicValues::>, Val>::from_vec(state.public_values.clone()); - Self { - committed_values_digest: pv.committed_value_digest, - deferred_proofs_digest: pv.deferred_proofs_digest, - start_pc: pv.start_pc, - exit_code: pv.exit_code, - start_shard: pv.shard, - // TODO: we assume that core proofs aren't in a later batch than one with a deferred proof - reconstruct_deferred_digest: [BabyBear::zero(); 8], - } - } +/// A proof that can be reduced along with other proofs into one proof. +#[derive(Serialize, Deserialize)] +pub enum SP1ReduceProofWrapper { + Core(SP1ReduceProof), + Recursive(SP1ReduceProof), } diff --git a/prover/src/utils.rs b/prover/src/utils.rs index 8daa6cb6c0..8983efdefe 100644 --- a/prover/src/utils.rs +++ b/prover/src/utils.rs @@ -8,12 +8,10 @@ use p3_bn254_fr::Bn254Fr; use p3_field::AbstractField; use p3_field::PrimeField32; use sp1_core::{ - air::{MachineAir, Word}, + air::Word, io::SP1Stdin, runtime::{Program, Runtime}, - stark::{Dom, ShardProof, StarkGenericConfig, StarkMachine, StarkVerifyingKey, Val}, }; -use sp1_recursion_program::{stark::EMPTY, types::QuotientDataValues}; use crate::SP1CoreProofData; @@ -27,22 +25,6 @@ impl SP1CoreProofData { } } -pub fn get_chip_quotient_data>>( - machine: &StarkMachine, - proof: &ShardProof, -) -> Vec { - machine - .shard_chips_ordered(&proof.chip_ordering) - .map(|chip| { - let log_quotient_degree = chip.log_quotient_degree(); - QuotientDataValues { - log_quotient_degree, - quotient_size: 1 << log_quotient_degree, - } - }) - .collect() -} - /// Get the number of cycles for a given program. pub fn get_cycles(elf: &[u8], stdin: &SP1Stdin) -> u64 { let program = Program::from(elf); @@ -59,37 +41,6 @@ pub fn load_elf(path: &str) -> Result, std::io::Error> { Ok(elf_code) } -pub fn get_sorted_indices>>( - machine: &StarkMachine, - proof: &ShardProof, -) -> Vec { - machine - .chips_sorted_indices(proof) - .into_iter() - .map(|x| match x { - Some(x) => x, - None => EMPTY, - }) - .collect() -} - -pub fn get_preprocessed_data>>( - machine: &StarkMachine, - vk: &StarkVerifyingKey, -) -> (Vec, Vec>) { - let chips = machine.chips(); - let (prep_sorted_indices, prep_domains) = machine - .preprocessed_chip_ids() - .into_iter() - .map(|chip_idx| { - let name = chips[chip_idx].name().clone(); - let prep_sorted_idx = vk.chip_ordering[&name]; - (prep_sorted_idx, vk.chip_information[prep_sorted_idx].1) - }) - .unzip(); - (prep_sorted_indices, prep_domains) -} - pub fn words_to_bytes(words: &[Word]) -> Vec { return words.iter().flat_map(|word| word.0).collect(); } diff --git a/prover/src/verify.rs b/prover/src/verify.rs index a48586651d..9d66971e2a 100644 --- a/prover/src/verify.rs +++ b/prover/src/verify.rs @@ -1,3 +1,5 @@ +use std::borrow::Borrow; + use anyhow::Result; use p3_baby_bear::BabyBear; use p3_field::AbstractField; @@ -99,7 +101,8 @@ impl SP1Prover { .verify(&self.compress_vk, &machine_proof, &mut challenger)?; // Validate public values - let public_values = RecursionPublicValues::from_vec(proof.proof.public_values.clone()); + let public_values: &RecursionPublicValues<_> = + proof.proof.public_values.as_slice().borrow(); // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully reduced. if public_values.is_complete != BabyBear::one() { @@ -118,7 +121,7 @@ impl SP1Prover { // Verify that the reduce program is the one we are expecting. let recursion_vkey_hash = self.compress_vk.hash_babybear(); - if public_values.recursion_vk_digest != recursion_vkey_hash { + if public_values.compress_vk_digest != recursion_vkey_hash { return Err(MachineVerificationError::InvalidPublicValues( "recursion vk hash mismatch", )); @@ -141,7 +144,8 @@ impl SP1Prover { .verify(&self.shrink_vk, &machine_proof, &mut challenger)?; // Validate public values - let public_values = RecursionPublicValues::from_vec(proof.proof.public_values.clone()); + let public_values: &RecursionPublicValues<_> = + proof.proof.public_values.as_slice().borrow(); // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully reduced. if public_values.is_complete != BabyBear::one() { @@ -158,14 +162,6 @@ impl SP1Prover { )); } - // Verify that the reduce program is the one we are expecting. - let recursion_vkey_hash = self.shrink_vk.hash_babybear(); - if public_values.recursion_vk_digest != recursion_vkey_hash { - return Err(MachineVerificationError::InvalidPublicValues( - "recursion vk hash mismatch", - )); - } - Ok(()) } @@ -183,7 +179,8 @@ impl SP1Prover { .verify(&self.wrap_vk, &machine_proof, &mut challenger)?; // Validate public values - let public_values = RecursionPublicValues::from_vec(proof.proof.public_values.clone()); + let public_values: &RecursionPublicValues<_> = + proof.proof.public_values.as_slice().borrow(); // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully reduced. if public_values.is_complete != BabyBear::one() { @@ -200,14 +197,6 @@ impl SP1Prover { )); } - // Verify that the reduce program is the one we are expecting. - let recursion_vkey_hash = self.shrink_vk.hash_babybear(); - if public_values.recursion_vk_digest != recursion_vkey_hash { - return Err(MachineVerificationError::InvalidPublicValues( - "recursion vk hash mismatch", - )); - } - Ok(()) } } diff --git a/recursion/circuit/src/stark.rs b/recursion/circuit/src/stark.rs index 194b262f28..e7c5b530ba 100644 --- a/recursion/circuit/src/stark.rs +++ b/recursion/circuit/src/stark.rs @@ -1,3 +1,4 @@ +use std::borrow::Borrow; use std::marker::PhantomData; use crate::fri::verify_two_adic_pcs; @@ -269,7 +270,7 @@ pub fn build_wrap_circuit( let element = builder.get(&proof.public_values, i); pv_elements.push(element); } - let pv = RecursionPublicValues::from_vec(pv_elements); + let pv: &RecursionPublicValues<_> = pv_elements.as_slice().borrow(); let one_felt: Felt<_> = builder.constant(BabyBear::one()); // Proof must be complete. In the reduce program, this will ensure that the SP1 proof has been // fully accumulated. diff --git a/recursion/compiler/src/ir/builder.rs b/recursion/compiler/src/ir/builder.rs index e8d1fd45a7..e4b562cda6 100644 --- a/recursion/compiler/src/ir/builder.rs +++ b/recursion/compiler/src/ir/builder.rs @@ -227,7 +227,11 @@ impl Builder { } /// Assert that two usizes are not equal. - pub fn assert_usize_ne(&mut self, lhs: SymbolicUsize, rhs: SymbolicUsize) { + pub fn assert_usize_ne( + &mut self, + lhs: impl Into>, + rhs: impl Into>, + ) { self.assert_ne::>(lhs, rhs); } diff --git a/recursion/core/src/air/public_values.rs b/recursion/core/src/air/public_values.rs index 07f2295b32..d84af5e905 100644 --- a/recursion/core/src/air/public_values.rs +++ b/recursion/core/src/air/public_values.rs @@ -9,6 +9,7 @@ use sp1_core::{ air::{Word, POSEIDON_NUM_WORDS}, stark::PROOF_MAX_NUM_PVS, }; +use sp1_derive::AlignedBorrow; use static_assertions::const_assert_eq; use std::mem::size_of; @@ -22,7 +23,8 @@ pub const RECURSIVE_PROOF_NUM_PV_ELTS: usize = size_of:: { pub sponge_state: [T; PERMUTATION_WIDTH], pub num_inputs: T, @@ -32,27 +34,6 @@ pub struct ChallengerPublicValues { } impl ChallengerPublicValues { - pub fn from_vec(data: Vec) -> Self { - if data.len() < CHALLENGER_STATE_NUM_ELTS { - panic!("Invalid number of items in the serialized vector."); - } - - let mut iter = data.iter().cloned(); - let sponge_state = iter.by_ref().take(PERMUTATION_WIDTH).collect::>(); - let num_inputs = iter.next().unwrap(); - let input_buffer = iter.by_ref().take(PERMUTATION_WIDTH).collect::>(); - let num_outputs = iter.next().unwrap(); - let output_buffer = iter.by_ref().take(PERMUTATION_WIDTH).collect::>(); - - Self { - sponge_state: unwrap_into_array(sponge_state), - num_inputs, - input_buffer: unwrap_into_array(input_buffer), - num_outputs, - output_buffer: unwrap_into_array(output_buffer), - } - } - pub fn set_challenger>( &self, challenger: &mut DuplexChallenger, @@ -68,7 +49,8 @@ impl ChallengerPublicValues { } /// The PublicValues struct is used to store all of a reduce proof's public values. -#[derive(Serialize, Deserialize, Clone, Copy, Default, Debug)] +#[derive(AlignedBorrow, Serialize, Deserialize, Clone, Copy, Default, Debug)] +#[repr(C)] pub struct RecursionPublicValues { /// The hash of all the bytes that the program has written to public values. pub committed_value_digest: [Word; PV_DIGEST_NUM_WORDS], @@ -106,11 +88,11 @@ pub struct RecursionPublicValues { /// The commitment to the sp1 program being proven. pub sp1_vk_digest: [T; DIGEST_SIZE], - /// The commitment to the recursion program being proven. - pub recursion_vk_digest: [T; DIGEST_SIZE], + /// The commitment to the compress key being used in recursive verification. + pub compress_vk_digest: [T; DIGEST_SIZE], - /// The commitment to the start program being proven. - pub verify_start_challenger: ChallengerPublicValues, + /// The leaf challenger containing the entropy from the main trace commitment. + pub leaf_challenger: ChallengerPublicValues, /// Current cumulative sum of lookup bus. pub cumulative_sum: [T; 4], @@ -118,68 +100,3 @@ pub struct RecursionPublicValues { /// Whether the proof completely proves the program execution. pub is_complete: T, } - -impl RecursionPublicValues { - /// Convert a vector of field elements into a PublicValues struct. - pub fn from_vec(data: Vec) -> Self { - if data.len() != RECURSIVE_PROOF_NUM_PV_ELTS { - panic!("Invalid number of items in the serialized vector."); - } - - let mut iter = data.iter().cloned(); - let committed_value_digest = (0..PV_DIGEST_NUM_WORDS) - .map(|_| Word::from_iter(iter.by_ref())) - .collect(); - let deferred_proofs_digest = iter.by_ref().take(POSEIDON_NUM_WORDS).collect::>(); - let start_pc = iter.next().unwrap(); - let next_pc = iter.next().unwrap(); - let exit_code = iter.next().unwrap(); - let start_shard = iter.next().unwrap(); - let next_shard = iter.next().unwrap(); - let start_reconstruct_challenger = ChallengerPublicValues::from_vec( - iter.by_ref() - .take(CHALLENGER_STATE_NUM_ELTS) - .collect::>(), - ); - let end_reconstruct_challenger = ChallengerPublicValues::from_vec( - iter.by_ref() - .take(CHALLENGER_STATE_NUM_ELTS) - .collect::>(), - ); - let start_reconstruct_deferred_digest = iter.by_ref().take(DIGEST_SIZE).collect::>(); - let end_reconstruct_deferred_digest = iter.by_ref().take(DIGEST_SIZE).collect::>(); - let sp1_vk_commit = iter.by_ref().take(DIGEST_SIZE).collect::>(); - let recursion_vk_commit = iter.by_ref().take(DIGEST_SIZE).collect::>(); - let verify_start_challenger = ChallengerPublicValues::from_vec( - iter.by_ref() - .take(CHALLENGER_STATE_NUM_ELTS) - .collect::>(), - ); - let cumulative_sum = iter.by_ref().take(4).collect::>(); - let is_complete = iter.next().unwrap(); - - Self { - committed_value_digest: unwrap_into_array(committed_value_digest), - deferred_proofs_digest: unwrap_into_array(deferred_proofs_digest), - start_pc, - next_pc, - exit_code, - start_shard, - next_shard, - start_reconstruct_challenger, - end_reconstruct_challenger, - start_reconstruct_deferred_digest: unwrap_into_array(start_reconstruct_deferred_digest), - end_reconstruct_deferred_digest: unwrap_into_array(end_reconstruct_deferred_digest), - sp1_vk_digest: unwrap_into_array(sp1_vk_commit), - recursion_vk_digest: unwrap_into_array(recursion_vk_commit), - verify_start_challenger, - cumulative_sum: unwrap_into_array(cumulative_sum), - is_complete, - } - } -} - -/// Convert a vector into an array, panicking if the length is incorrect. -fn unwrap_into_array(input: Vec) -> [T; N] { - input.try_into().unwrap() -} diff --git a/recursion/core/src/fri_fold/mod.rs b/recursion/core/src/fri_fold/mod.rs index f9bcd82508..02ef07db1d 100644 --- a/recursion/core/src/fri_fold/mod.rs +++ b/recursion/core/src/fri_fold/mod.rs @@ -23,7 +23,7 @@ use crate::runtime::{ExecutionRecord, RecursionProgram}; pub const NUM_FRI_FOLD_COLS: usize = core::mem::size_of::>(); #[derive(Default)] -pub struct FriFoldChip { +pub struct FriFoldChip { pub fixed_log2_rows: Option, } @@ -83,13 +83,13 @@ pub struct FriFoldCols { pub is_real: T, } -impl BaseAir for FriFoldChip { +impl BaseAir for FriFoldChip { fn width(&self) -> usize { NUM_FRI_FOLD_COLS } } -impl MachineAir for FriFoldChip { +impl MachineAir for FriFoldChip { type Record = ExecutionRecord; type Program = RecursionProgram; @@ -167,7 +167,7 @@ impl MachineAir for FriFoldChip { } } -impl FriFoldChip { +impl FriFoldChip { pub fn eval_fri_fold( &self, builder: &mut AB, @@ -176,6 +176,16 @@ impl FriFoldChip { receive_table: AB::Var, memory_access: AB::Var, ) { + // Dummy constraints to normalize to DEGREE when DEGREE > 3. + if DEGREE > 3 { + let lhs = (0..DEGREE) + .map(|_| local.is_real.into()) + .product::(); + let rhs = (0..DEGREE) + .map(|_| local.is_real.into()) + .product::(); + builder.assert_eq(lhs, rhs); + } // Constraint that the operands are sent from the CPU table. let first_iteration_clk = local.clk.into() - local.m.into(); let total_num_iterations = local.m.into() + AB::Expr::one(); @@ -358,7 +368,7 @@ impl FriFoldChip { } } -impl Air for FriFoldChip +impl Air for FriFoldChip where AB: SP1RecursionAirBuilder, { diff --git a/recursion/core/src/multi/mod.rs b/recursion/core/src/multi/mod.rs index 5904de276c..f0acb982ce 100644 --- a/recursion/core/src/multi/mod.rs +++ b/recursion/core/src/multi/mod.rs @@ -17,7 +17,7 @@ use crate::runtime::{ExecutionRecord, RecursionProgram}; pub const NUM_MULTI_COLS: usize = core::mem::size_of::>(); #[derive(Default)] -pub struct MultiChip { +pub struct MultiChip { pub fixed_log2_rows: Option, } @@ -42,13 +42,13 @@ pub union InstructionSpecificCols { poseidon2: Poseidon2Cols, } -impl BaseAir for MultiChip { +impl BaseAir for MultiChip { fn width(&self) -> usize { NUM_MULTI_COLS } } -impl MachineAir for MultiChip { +impl MachineAir for MultiChip { type Record = ExecutionRecord; type Program = RecursionProgram; @@ -66,7 +66,7 @@ impl MachineAir for MultiChip { input: &ExecutionRecord, output: &mut ExecutionRecord, ) -> RowMajorMatrix { - let fri_fold_chip = FriFoldChip::default(); + let fri_fold_chip = FriFoldChip::<3>::default(); let poseidon2 = Poseidon2Chip::default(); let fri_fold_trace = fri_fold_chip.generate_trace(input, output); let mut poseidon2_trace = poseidon2.generate_trace(input, output); @@ -84,8 +84,10 @@ impl MachineAir for MultiChip { cols.is_fri_fold = F::one(); let fri_fold_cols = *cols.fri_fold(); - cols.fri_fold_receive_table = FriFoldChip::do_receive_table(&fri_fold_cols); - cols.fri_fold_memory_access = FriFoldChip::do_memory_access(&fri_fold_cols); + cols.fri_fold_receive_table = + FriFoldChip::<3>::do_receive_table(&fri_fold_cols); + cols.fri_fold_memory_access = + FriFoldChip::<3>::do_memory_access(&fri_fold_cols); } else { cols.is_poseidon2 = F::one(); @@ -113,7 +115,7 @@ impl MachineAir for MultiChip { } } -impl Air for MultiChip +impl Air for MultiChip where AB: SP1RecursionAirBuilder, { @@ -155,15 +157,15 @@ where let fri_columns_local = local.fri_fold(); sub_builder.assert_eq( - local.is_fri_fold * FriFoldChip::do_memory_access::(fri_columns_local), + local.is_fri_fold * FriFoldChip::<3>::do_memory_access::(fri_columns_local), local.fri_fold_memory_access, ); sub_builder.assert_eq( - local.is_fri_fold * FriFoldChip::do_receive_table::(fri_columns_local), + local.is_fri_fold * FriFoldChip::<3>::do_receive_table::(fri_columns_local), local.fri_fold_receive_table, ); - let fri_fold_chip = FriFoldChip::default(); + let fri_fold_chip = FriFoldChip::<3>::default(); fri_fold_chip.eval_fri_fold( &mut sub_builder, local.fri_fold(), @@ -234,7 +236,7 @@ mod tests { let config = BabyBearPoseidon2::compressed(); let mut challenger = config.challenger(); - let chip = MultiChip { + let chip = MultiChip::<5> { fixed_log2_rows: None, }; diff --git a/recursion/core/src/program/mod.rs b/recursion/core/src/program/mod.rs index bc285ac7c8..e151844ee0 100644 --- a/recursion/core/src/program/mod.rs +++ b/recursion/core/src/program/mod.rs @@ -81,7 +81,7 @@ impl MachineAir for ProgramChip { pad_rows_fixed( &mut rows, || [F::zero(); NUM_PROGRAM_PREPROCESSED_COLS], - Some(20), + None, ); // Convert the trace to a row major matrix. @@ -130,7 +130,7 @@ impl MachineAir for ProgramChip { .collect::>(); // Pad the trace to a power of two. - pad_rows_fixed(&mut rows, || [F::zero(); NUM_PROGRAM_MULT_COLS], Some(20)); + pad_rows_fixed(&mut rows, || [F::zero(); NUM_PROGRAM_MULT_COLS], None); // Convert the trace to a row major matrix. RowMajorMatrix::new( diff --git a/recursion/core/src/stark/mod.rs b/recursion/core/src/stark/mod.rs index f02303adcc..2e97eec030 100644 --- a/recursion/core/src/stark/mod.rs +++ b/recursion/core/src/stark/mod.rs @@ -29,9 +29,9 @@ pub enum RecursionAir, const DEGREE: u MemoryGlobal(MemoryGlobalChip), Poseidon2Wide(Poseidon2WideChip), Poseidon2Skinny(Poseidon2Chip), - FriFold(FriFoldChip), + FriFold(FriFoldChip), RangeCheck(RangeCheckChip), - Multi(MultiChip), + Multi(MultiChip), } impl, const DEGREE: usize> RecursionAir { @@ -67,7 +67,7 @@ impl, const DEGREE: usize> RecursionAi > { fixed_log2_rows: None, }))) - .chain(once(RecursionAir::FriFold(FriFoldChip { + .chain(once(RecursionAir::FriFold(FriFoldChip:: { fixed_log2_rows: None, }))) .chain(once(RecursionAir::RangeCheck(RangeCheckChip::default()))) diff --git a/recursion/core/src/stark/utils.rs b/recursion/core/src/stark/utils.rs index 92c59508ca..9321d82288 100644 --- a/recursion/core/src/stark/utils.rs +++ b/recursion/core/src/stark/utils.rs @@ -1,4 +1,3 @@ -use crate::stark::RecursionAirWideDeg3; use p3_baby_bear::BabyBear; use sp1_core::stark::StarkGenericConfig; use sp1_core::utils; @@ -7,6 +6,7 @@ use sp1_core::utils::BabyBearPoseidon2; use crate::air::Block; use crate::runtime::RecursionProgram; use crate::runtime::Runtime; +use crate::stark::RecursionAir; use crate::stark::RecursionAirSkinnyDeg7; use p3_field::PrimeField32; use sp1_core::utils::run_test_machine; @@ -44,7 +44,7 @@ pub fn run_test_recursion( ); if test_config == TestConfig::All || test_config == TestConfig::WideDeg3 { - let machine = RecursionAirWideDeg3::machine(BabyBearPoseidon2::default()); + let machine = RecursionAir::<_, 3>::machine(BabyBearPoseidon2::default()); let (pk, vk) = machine.setup(&program); let record = runtime.record.clone(); let result = run_test_machine(record, machine, pk, vk); diff --git a/recursion/program/Cargo.toml b/recursion/program/Cargo.toml index 002b9cb815..a3069a92ad 100644 --- a/recursion/program/Cargo.toml +++ b/recursion/program/Cargo.toml @@ -11,6 +11,7 @@ p3-field = { workspace = true } p3-commit = { workspace = true } p3-fri = { workspace = true } p3-matrix = { workspace = true } +p3-maybe-rayon = { workspace = true } p3-util = { workspace = true } p3-symmetric = { workspace = true } p3-challenger = { workspace = true } @@ -26,7 +27,3 @@ serde = { version = "1.0.197", features = ["derive"] } rand = "0.8.4" array-macro = "2.1.8" tracing = "0.1.40" - -[[bin]] -name = "fri_sweep" -path = "experiments/fri_sweep.rs" diff --git a/recursion/program/experiments/.gitignore b/recursion/program/experiments/.gitignore deleted file mode 100644 index 872aa273a4..0000000000 --- a/recursion/program/experiments/.gitignore +++ /dev/null @@ -1 +0,0 @@ -results \ No newline at end of file diff --git a/recursion/program/experiments/fri_sweep.rs b/recursion/program/experiments/fri_sweep.rs deleted file mode 100644 index 6fe66748f3..0000000000 --- a/recursion/program/experiments/fri_sweep.rs +++ /dev/null @@ -1,35 +0,0 @@ -//! Sweeps end-to-end prover performance across a wide range of parameters for Fibonacci. - -#![feature(generic_const_exprs)] -#![allow(incomplete_features)] - -use std::{fs::File, io::BufWriter, io::Write}; - -use itertools::iproduct; -use sp1_core::utils::{inner_perm, InnerChallenge, InnerVal}; -use sp1_recursion_core::runtime::Runtime; -use sp1_recursion_program::fri::two_adic_pcs::tests::build_test_fri_with_cols_and_log2_rows; - -fn main() { - // Setup sweep. - let columns = [10, 50, 100, 200, 400]; - let log2_rows = [18, 19, 20, 21, 22, 23]; - - let mut lines = vec!["columns,log2_rows,cycles".to_string()]; - for (columns, log2_rows) in iproduct!(columns, log2_rows) { - println!("running: columns={}, log2_rows={}", columns, log2_rows); - let (program, witness) = build_test_fri_with_cols_and_log2_rows(columns, log2_rows); - let mut runtime = Runtime::::new(&program, inner_perm()); - runtime.witness_stream = witness; - runtime.run(); - lines.push(format!("{},{},{}", columns, log2_rows, runtime.timestamp)); - } - - let file = File::create("results/fri_sweep.csv").unwrap(); - let mut writer = BufWriter::new(file); - for line in lines.clone() { - writeln!(writer, "{}", line).unwrap(); - } - - println!("{:#?}", lines); -} diff --git a/recursion/program/src/challenger.rs b/recursion/program/src/challenger.rs index 86942bfe5a..6a05cca8e3 100644 --- a/recursion/program/src/challenger.rs +++ b/recursion/program/src/challenger.rs @@ -7,8 +7,9 @@ use sp1_recursion_compiler::prelude::{Array, Builder, Config, DslVariable, Ext, use sp1_recursion_core::runtime::{DIGEST_SIZE, PERMUTATION_WIDTH}; use crate::fri::types::DigestVariable; -use crate::utils::felt2var; +use crate::types::VerifyingKeyVariable; +/// Reference: [p3_challenger::CanObserve]. pub trait CanObserveVariable { fn observe(&mut self, builder: &mut Builder, value: V); @@ -19,6 +20,7 @@ pub trait CanSampleVariable { fn sample(&mut self, builder: &mut Builder) -> V; } +/// Reference: [p3_challenger::FieldChallenger]. pub trait FeltChallenger: CanObserveVariable> + CanSampleVariable> + CanSampleBitsVariable { @@ -90,23 +92,17 @@ impl DuplexChallengerVariable { builder.range(0, PERMUTATION_WIDTH).for_each(|i, builder| { let element = builder.get(&self.sponge_state, i); let other_element = builder.get(&other.sponge_state, i); - let element = felt2var(builder, element); - let other_element = felt2var(builder, other_element); - builder.assert_var_eq(element, other_element); + builder.assert_felt_eq(element, other_element); }); builder.range(0, self.nb_inputs).for_each(|i, builder| { let element = builder.get(&self.input_buffer, i); let other_element = builder.get(&other.input_buffer, i); - let element = felt2var(builder, element); - let other_element = felt2var(builder, other_element); - builder.assert_var_eq(element, other_element); + builder.assert_felt_eq(element, other_element); }); builder.range(0, self.nb_outputs).for_each(|i, builder| { let element = builder.get(&self.output_buffer, i); let other_element = builder.get(&other.output_buffer, i); - let element = felt2var(builder, element); - let other_element = felt2var(builder, other_element); - builder.assert_var_eq(element, other_element); + builder.assert_felt_eq(element, other_element); }); } @@ -271,6 +267,21 @@ impl CanObserveVariable> for DuplexChallengerVar } } +impl CanObserveVariable> for DuplexChallengerVariable { + fn observe(&mut self, builder: &mut Builder, value: VerifyingKeyVariable) { + self.observe_commitment(builder, value.commitment); + self.observe(builder, value.pc_start) + } + + fn observe_slice( + &mut self, + _builder: &mut Builder, + _values: Array>, + ) { + todo!() + } +} + impl FeltChallenger for DuplexChallengerVariable { fn sample_ext(&mut self, builder: &mut Builder) -> Ext { DuplexChallengerVariable::sample_ext(self, builder) diff --git a/recursion/program/src/fri/domain.rs b/recursion/program/src/fri/domain.rs index 01a821eae7..f3f20c7a76 100644 --- a/recursion/program/src/fri/domain.rs +++ b/recursion/program/src/fri/domain.rs @@ -215,7 +215,7 @@ pub(crate) mod tests { // Initialize a builder. let mut builder = AsmBuilder::::default(); - let config_var = const_fri_config(&mut builder, inner_fri_config()); + let config_var = const_fri_config(&mut builder, &inner_fri_config()); for i in 0..5 { let log_d_val = 10 + i; diff --git a/recursion/program/src/fri/hints.rs b/recursion/program/src/fri/hints.rs index 367df671aa..9b41276eee 100644 --- a/recursion/program/src/fri/hints.rs +++ b/recursion/program/src/fri/hints.rs @@ -27,7 +27,7 @@ impl Hintable for InnerDigest { } fn write(&self) -> Vec>> { - let h: [InnerVal; DIGEST_SIZE] = (*self).into(); + let h: [InnerVal; DIGEST_SIZE] = *self; vec![h.iter().map(|x| Block::from(*x)).collect()] } } diff --git a/recursion/program/src/fri/two_adic_pcs.rs b/recursion/program/src/fri/two_adic_pcs.rs index 9179ec8000..0e9c316a8b 100644 --- a/recursion/program/src/fri/two_adic_pcs.rs +++ b/recursion/program/src/fri/two_adic_pcs.rs @@ -364,7 +364,7 @@ pub mod tests { // Test the recursive Pcs. let mut builder = Builder::::default(); - let config = const_fri_config(&mut builder, compressed_fri_config()); + let config = const_fri_config(&mut builder, &compressed_fri_config()); let pcs = TwoAdicFriPcsVariable { config }; let rounds = builder.constant::>>(vec![(commit, os.clone())]); diff --git a/recursion/program/src/fri/types.rs b/recursion/program/src/fri/types.rs index 82ce3fb1cc..ca2541a3be 100644 --- a/recursion/program/src/fri/types.rs +++ b/recursion/program/src/fri/types.rs @@ -2,7 +2,7 @@ use sp1_recursion_compiler::prelude::*; use crate::fri::TwoAdicMultiplicativeCosetVariable; -pub type DigestVariable = Array>; +pub type DigestVariable = Array::F>>; #[derive(DslVariable, Clone)] pub struct FriConfigVariable { diff --git a/recursion/program/src/hints.rs b/recursion/program/src/hints.rs index daa6bbef1c..6ebfa8a8c1 100644 --- a/recursion/program/src/hints.rs +++ b/recursion/program/src/hints.rs @@ -3,14 +3,14 @@ use p3_challenger::DuplexChallenger; use p3_commit::TwoAdicMultiplicativeCoset; use p3_field::TwoAdicField; use p3_field::{AbstractExtensionField, AbstractField}; -use sp1_core::air::{Word, PV_DIGEST_NUM_WORDS}; +use sp1_core::air::{MachineAir, Word, PV_DIGEST_NUM_WORDS}; +use sp1_core::stark::StarkGenericConfig; use sp1_core::stark::{ - AirOpenedValues, ChipOpenedValues, Com, ShardCommitment, ShardOpenedValues, ShardProof, + AirOpenedValues, ChipOpenedValues, Com, RiscvAir, ShardCommitment, ShardOpenedValues, }; -use sp1_core::stark::{StarkGenericConfig, StarkVerifyingKey}; use sp1_core::utils::{ - BabyBearPoseidon2, BabyBearPoseidon2Inner, InnerChallenge, InnerDigest, InnerDigestHash, - InnerPcsProof, InnerPerm, InnerVal, + BabyBearPoseidon2, InnerChallenge, InnerDigest, InnerDigestHash, InnerPcsProof, InnerPerm, + InnerVal, }; use sp1_recursion_compiler::{ config::InnerConfig, @@ -21,11 +21,14 @@ use sp1_recursion_core::runtime::PERMUTATION_WIDTH; use crate::challenger::DuplexChallengerVariable; use crate::fri::TwoAdicMultiplicativeCosetVariable; +use crate::machine::*; +use crate::stark::{ShardProofHint, VerifyingKeyHint}; use crate::types::{ AirOpenedValuesVariable, ChipOpenedValuesVariable, Sha256DigestVariable, ShardCommitmentVariable, ShardOpenedValuesVariable, ShardProofVariable, VerifyingKeyVariable, }; use crate::types::{QuotientData, QuotientDataValues}; +use crate::utils::{get_chip_quotient_data, get_preprocessed_data, get_sorted_indices}; pub trait Hintable { type HintVariable: MemVariable; @@ -146,12 +149,12 @@ impl Hintable for TwoAdicMultiplicativeCoset { trait VecAutoHintable: Hintable {} -impl VecAutoHintable for ShardProof {} -impl VecAutoHintable for ShardProof {} +impl<'a, A: MachineAir> VecAutoHintable for ShardProofHint<'a, BabyBearPoseidon2, A> {} impl VecAutoHintable for TwoAdicMultiplicativeCoset {} impl VecAutoHintable for Vec {} impl VecAutoHintable for QuotientDataValues {} impl VecAutoHintable for Vec {} +impl VecAutoHintable for Vec {} impl> VecAutoHintable for &I {} @@ -417,41 +420,53 @@ impl Hintable for DuplexChallenger { } impl< + 'a, SC: StarkGenericConfig< Pcs = ::Pcs, Challenge = ::Challenge, Challenger = ::Challenger, >, - > Hintable for StarkVerifyingKey + A: MachineAir, + > Hintable for VerifyingKeyHint<'a, SC, A> { type HintVariable = VerifyingKeyVariable; fn read(builder: &mut Builder) -> Self::HintVariable { let commitment = InnerDigest::read(builder); let pc_start = InnerVal::read(builder); + let preprocessed_sorted_idxs = Vec::::read(builder); + let prep_domains = Vec::>::read(builder); VerifyingKeyVariable { commitment, pc_start, + preprocessed_sorted_idxs, + prep_domains, } } fn write(&self) -> Vec::F>>> { + let (preprocessed_sorted_idxs, prep_domains) = get_preprocessed_data(self.machine, self.vk); + let mut stream = Vec::new(); - let h: InnerDigest = self.commit.into(); + let h: InnerDigest = self.vk.commit.into(); stream.extend(h.write()); - stream.extend(self.pc_start.write()); + stream.extend(self.vk.pc_start.write()); + stream.extend(preprocessed_sorted_idxs.write()); + stream.extend(prep_domains.write()); stream } } // Implement Hintable for ShardProof where SC is equivalent to BabyBearPoseidon2 impl< + 'a, SC: StarkGenericConfig< Pcs = ::Pcs, Challenge = ::Challenge, Challenger = ::Challenger, >, - > Hintable for ShardProof + A: MachineAir, + > Hintable for ShardProofHint<'a, SC, A> where ShardCommitment>: Hintable, { @@ -462,20 +477,205 @@ where let opened_values = ShardOpenedValues::read(builder); let opening_proof = InnerPcsProof::read(builder); let public_values = Vec::::read(builder); + let quotient_data = Vec::::read(builder); + let sorted_idxs = Vec::::read(builder); ShardProofVariable { commitment, opened_values, opening_proof, public_values, + quotient_data, + sorted_idxs, + } + } + + fn write(&self) -> Vec::F>>> { + let quotient_data = get_chip_quotient_data(self.machine, self.proof); + let sorted_indices = get_sorted_indices(self.machine, self.proof); + + let mut stream = Vec::new(); + stream.extend(self.proof.commitment.write()); + stream.extend(self.proof.opened_values.write()); + stream.extend(self.proof.opening_proof.write()); + stream.extend(self.proof.public_values.write()); + stream.extend(quotient_data.write()); + stream.extend(sorted_indices.write()); + + stream + } +} + +impl<'a, A: MachineAir> Hintable + for SP1RecursionMemoryLayout<'a, BabyBearPoseidon2, A> +{ + type HintVariable = SP1RecursionMemoryLayoutVariable; + + fn read(builder: &mut Builder) -> Self::HintVariable { + let vk = VerifyingKeyHint::<'a, BabyBearPoseidon2, A>::read(builder); + let shard_proofs = Vec::>::read(builder); + let leaf_challenger = DuplexChallenger::::read(builder); + let initial_reconstruct_challenger = + DuplexChallenger::::read(builder); + let is_complete = builder.hint_var(); + + SP1RecursionMemoryLayoutVariable { + vk, + shard_proofs, + leaf_challenger, + initial_reconstruct_challenger, + is_complete, } } fn write(&self) -> Vec::F>>> { let mut stream = Vec::new(); - stream.extend(self.commitment.write()); - stream.extend(self.opened_values.write()); - stream.extend(self.opening_proof.write()); - stream.extend(self.public_values.write()); + + let vk_hint = VerifyingKeyHint::<'a, BabyBearPoseidon2, _>::new(self.machine, self.vk); + + let proof_hints = self + .shard_proofs + .iter() + .map(|proof| ShardProofHint::::new(self.machine, proof)) + .collect::>(); + + stream.extend(vk_hint.write()); + stream.extend(proof_hints.write()); + stream.extend(self.leaf_challenger.write()); + stream.extend(self.initial_reconstruct_challenger.write()); + stream.extend((self.is_complete as usize).write()); + + stream + } +} + +impl<'a, A: MachineAir> Hintable for SP1ReduceMemoryLayout<'a, BabyBearPoseidon2, A> { + type HintVariable = SP1ReduceMemoryLayoutVariable; + + fn read(builder: &mut Builder) -> Self::HintVariable { + let compress_vk = VerifyingKeyHint::<'a, BabyBearPoseidon2, A>::read(builder); + let shard_proofs = Vec::>::read(builder); + let kinds = Vec::::read(builder); + let is_complete = builder.hint_var(); + + SP1ReduceMemoryLayoutVariable { + compress_vk, + shard_proofs, + kinds, + is_complete, + } + } + + fn write(&self) -> Vec::F>>> { + let mut stream = Vec::new(); + + let compress_vk_hint = VerifyingKeyHint::<'a, BabyBearPoseidon2, _>::new( + self.recursive_machine, + self.compress_vk, + ); + + let proof_hints = self + .shard_proofs + .iter() + .map(|proof| ShardProofHint::::new(self.recursive_machine, proof)) + .collect::>(); + + let kinds = self.kinds.iter().map(|k| *k as usize).collect::>(); + + stream.extend(compress_vk_hint.write()); + stream.extend(proof_hints.write()); + stream.extend(kinds.write()); + stream.extend((self.is_complete as usize).write()); + + stream + } +} + +impl<'a, A: MachineAir> Hintable for SP1RootMemoryLayout<'a, BabyBearPoseidon2, A> { + type HintVariable = SP1RootMemoryLayoutVariable; + + fn read(builder: &mut Builder) -> Self::HintVariable { + let proof = ShardProofHint::<'a, BabyBearPoseidon2, A>::read(builder); + let is_reduce = builder.hint_var(); + + SP1RootMemoryLayoutVariable { proof, is_reduce } + } + + fn write(&self) -> Vec::F>>> { + let mut stream = Vec::new(); + + let proof_hint = ShardProofHint::::new(self.machine, &self.proof); + + stream.extend(proof_hint.write()); + stream.extend((self.is_reduce as usize).write()); + + stream + } +} + +impl<'a, A: MachineAir> Hintable + for SP1DeferredMemoryLayout<'a, BabyBearPoseidon2, A> +{ + type HintVariable = SP1DeferredMemoryLayoutVariable; + + fn read(builder: &mut Builder) -> Self::HintVariable { + let compress_vk = VerifyingKeyHint::<'a, BabyBearPoseidon2, A>::read(builder); + let proofs = Vec::>::read(builder); + let start_reconstruct_deferred_digest = Vec::::read(builder); + let is_complete = builder.hint_var(); + + let sp1_vk = VerifyingKeyHint::<'a, BabyBearPoseidon2, RiscvAir<_>>::read(builder); + let committed_value_digest = Vec::>::read(builder); + let deferred_proofs_digest = Vec::::read(builder); + let leaf_challenger = DuplexChallenger::::read(builder); + let end_pc = InnerVal::read(builder); + let end_shard = InnerVal::read(builder); + + SP1DeferredMemoryLayoutVariable { + compress_vk, + proofs, + start_reconstruct_deferred_digest, + is_complete, + sp1_vk, + committed_value_digest, + deferred_proofs_digest, + leaf_challenger, + end_pc, + end_shard, + } + } + + fn write(&self) -> Vec::F>>> { + let mut stream = Vec::new(); + + let sp1_vk_hint = + VerifyingKeyHint::<'a, BabyBearPoseidon2, _>::new(self.sp1_machine, self.sp1_vk); + + let compress_vk_hint = + VerifyingKeyHint::<'a, BabyBearPoseidon2, _>::new(self.machine, self.compress_vk); + + let proof_hints = self + .proofs + .iter() + .map(|proof| ShardProofHint::::new(self.machine, proof)) + .collect::>(); + + let committed_value_digest = self + .committed_value_digest + .iter() + .map(|w| w.0.to_vec()) + .collect::>(); + + stream.extend(compress_vk_hint.write()); + stream.extend(proof_hints.write()); + stream.extend(self.start_reconstruct_deferred_digest.write()); + stream.extend((self.is_complete as usize).write()); + + stream.extend(sp1_vk_hint.write()); + stream.extend(committed_value_digest.write()); + stream.extend(self.deferred_proofs_digest.write()); + stream.extend(self.leaf_challenger.write()); + stream.extend(self.end_pc.write()); + stream.extend(self.end_shard.write()); stream } diff --git a/recursion/program/src/lib.rs b/recursion/program/src/lib.rs index 8ff9fd2a43..caf5ca0b92 100644 --- a/recursion/program/src/lib.rs +++ b/recursion/program/src/lib.rs @@ -1,14 +1,12 @@ -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] -#![allow(type_alias_bounds)] #![allow(clippy::type_complexity)] #![allow(clippy::too_many_arguments)] + pub mod challenger; pub mod commit; pub mod constraints; pub mod fri; pub mod hints; -pub mod reduce; +pub mod machine; pub mod stark; pub mod types; pub mod utils; diff --git a/recursion/program/src/machine/compress.rs b/recursion/program/src/machine/compress.rs new file mode 100644 index 0000000000..b3c98ad155 --- /dev/null +++ b/recursion/program/src/machine/compress.rs @@ -0,0 +1,475 @@ +use std::array; +use std::borrow::{Borrow, BorrowMut}; +use std::marker::PhantomData; + +use crate::machine::utils::assert_complete; +use itertools::{izip, Itertools}; +use p3_air::Air; +use p3_baby_bear::BabyBear; +use p3_commit::TwoAdicMultiplicativeCoset; +use p3_field::{AbstractField, PrimeField32, TwoAdicField}; +use sp1_core::air::MachineAir; +use sp1_core::air::{Word, POSEIDON_NUM_WORDS, PV_DIGEST_NUM_WORDS}; +use sp1_core::stark::StarkMachine; +use sp1_core::stark::{Com, ShardProof, StarkGenericConfig, StarkVerifyingKey}; +use sp1_core::utils::BabyBearPoseidon2; +use sp1_recursion_compiler::config::InnerConfig; +use sp1_recursion_compiler::ir::{Array, Builder, Config, Felt, Var}; +use sp1_recursion_compiler::prelude::DslVariable; +use sp1_recursion_core::air::{RecursionPublicValues, RECURSIVE_PROOF_NUM_PV_ELTS}; +use sp1_recursion_core::runtime::{RecursionProgram, D, DIGEST_SIZE}; + +use sp1_recursion_compiler::prelude::*; + +use crate::challenger::{CanObserveVariable, DuplexChallengerVariable}; +use crate::fri::TwoAdicFriPcsVariable; +use crate::hints::Hintable; +use crate::stark::{RecursiveVerifierConstraintFolder, StarkVerifier}; +use crate::types::ShardProofVariable; +use crate::types::VerifyingKeyVariable; +use crate::utils::{ + assert_challenger_eq_pv, assign_challenger_from_pv, const_fri_config, + get_challenger_public_values, hash_vkey, +}; + +use super::utils::proof_data_from_vk; + +/// A program to verify a batch of recursive proofs and aggregate their public values. +#[derive(Debug, Clone, Copy)] +pub struct SP1CompressVerifier { + _phantom: PhantomData<(C, SC, A)>, +} + +/// The different types of programs that can be verified by the `SP1ReduceVerifier`. +#[derive(Debug, Clone, Copy)] +pub enum ReduceProgramType { + /// A batch of proofs that are all SP1 Core proofs. + Core = 0, + /// A batch of proofs that are all deferred proofs. + Deferred = 1, + /// A batch of proofs that are reduce proofs of a higher level in the recursion tree. + Reduce = 2, +} + +/// An input layout for the reduce verifier. +pub struct SP1ReduceMemoryLayout<'a, SC: StarkGenericConfig, A: MachineAir> { + pub compress_vk: &'a StarkVerifyingKey, + pub recursive_machine: &'a StarkMachine, + pub shard_proofs: Vec>, + pub is_complete: bool, + pub kinds: Vec, +} + +#[derive(DslVariable, Clone)] +pub struct SP1ReduceMemoryLayoutVariable { + pub compress_vk: VerifyingKeyVariable, + pub shard_proofs: Array>, + pub kinds: Array>, + pub is_complete: Var, +} + +impl SP1CompressVerifier +where + A: MachineAir + for<'a> Air>, +{ + /// Create a new instance of the program for the [BabyBearPoseidon2] config. + pub fn build( + machine: &StarkMachine, + recursive_vk: &StarkVerifyingKey, + deferred_vk: &StarkVerifyingKey, + ) -> RecursionProgram { + let mut builder = Builder::::default(); + + let input: SP1ReduceMemoryLayoutVariable<_> = builder.uninit(); + SP1ReduceMemoryLayout::::witness(&input, &mut builder); + + let pcs = TwoAdicFriPcsVariable { + config: const_fri_config(&mut builder, machine.config().pcs().fri_config()), + }; + SP1CompressVerifier::verify( + &mut builder, + &pcs, + machine, + input, + recursive_vk, + deferred_vk, + ); + + builder.compile_program() + } +} + +impl SP1CompressVerifier +where + C::F: PrimeField32 + TwoAdicField, + SC: StarkGenericConfig< + Val = C::F, + Challenge = C::EF, + Domain = TwoAdicMultiplicativeCoset, + >, + A: MachineAir + for<'a> Air>, + Com: Into<[SC::Val; DIGEST_SIZE]>, +{ + /// Verify a batch of recursive proofs and aggregate their public values. + /// + /// The compression verifier can aggregate proofs of different kinds: + /// - Core proofs: proofs which are recursive proof of a batch of SP1 shard proofs. The + /// implementation in this function assumes a fixed recursive verifier speicified by + /// `recursive_vk`. + /// - Deferred proofs: proofs which are recursive proof of a batch of deferred proofs. The + /// implementation in this function assumes a fixed deferred verification program specified + /// by `deferred_vk`. + /// - Compress proofs: these are proofs which refer to a prove of this program. The key for + /// it is part of public values will be propagated accross all levels of recursion and will + /// be checked against itself as in [sp1_prover::Prover] or as in [super::SP1RootVerifier]. + pub fn verify( + builder: &mut Builder, + pcs: &TwoAdicFriPcsVariable, + machine: &StarkMachine, + input: SP1ReduceMemoryLayoutVariable, + recursive_vk: &StarkVerifyingKey, + deferred_vk: &StarkVerifyingKey, + ) { + let SP1ReduceMemoryLayoutVariable { + compress_vk, + shard_proofs, + kinds, + is_complete, + } = input; + + // Initialize the values for the aggregated public output. + + let mut reduce_public_values_stream: Vec> = (0..RECURSIVE_PROOF_NUM_PV_ELTS) + .map(|_| builder.uninit()) + .collect(); + + let reduce_public_values: &mut RecursionPublicValues<_> = + reduce_public_values_stream.as_mut_slice().borrow_mut(); + + // Compute the digest of compress_vk and input the value to the public values. + let compress_vk_digest = hash_vkey(builder, &compress_vk); + + reduce_public_values.compress_vk_digest = + array::from_fn(|i| builder.get(&compress_vk_digest, i)); + + // Assert that there is at least one proof. + builder.assert_usize_ne(shard_proofs.len(), 0); + // Assert that the number of proofs is equal to the number of kinds. + builder.assert_usize_eq(shard_proofs.len(), kinds.len()); + + // Initialize the consistency check variables. + let sp1_vk_digest: [Felt<_>; DIGEST_SIZE] = array::from_fn(|_| builder.uninit()); + let pc: Felt<_> = builder.uninit(); + let shard: Felt<_> = builder.uninit(); + let mut initial_reconstruct_challenger = DuplexChallengerVariable::new(builder); + let mut reconstruct_challenger = DuplexChallengerVariable::new(builder); + let mut leaf_challenger = DuplexChallengerVariable::new(builder); + let committed_value_digest: [Word>; PV_DIGEST_NUM_WORDS] = + array::from_fn(|_| Word(array::from_fn(|_| builder.uninit()))); + let deferred_proofs_digest: [Felt<_>; POSEIDON_NUM_WORDS] = + array::from_fn(|_| builder.uninit()); + let reconstruct_deferred_digest: [Felt<_>; POSEIDON_NUM_WORDS] = + core::array::from_fn(|_| builder.uninit()); + let cumulative_sum: [Felt<_>; D] = core::array::from_fn(|_| builder.eval(C::F::zero())); + + // Collect verifying keys for each kind of program. + let recursive_vk_variable = proof_data_from_vk(builder, recursive_vk, machine); + let deferred_vk_variable = proof_data_from_vk(builder, deferred_vk, machine); + + // Get field values for the proof kind. + let core_kind = C::N::from_canonical_u32(ReduceProgramType::Core as u32); + let deferred_kind = C::N::from_canonical_u32(ReduceProgramType::Deferred as u32); + let reduce_kind = C::N::from_canonical_u32(ReduceProgramType::Reduce as u32); + + // Verify the shard proofs and connect the values. + builder.range(0, shard_proofs.len()).for_each(|i, builder| { + // Load the proof. + let proof = builder.get(&shard_proofs, i); + // Get the kind of proof we are verifying. + let kind = builder.get(&kinds, i); + + // Verify the shard proof. + + // Initialize values for verifying key and proof data. + let vk: VerifyingKeyVariable<_> = builder.uninit(); + // Set the correct value given the value of kind, and assert it must be one of the + // valid values. We can do that by nested `if-else` statements. + builder.if_eq(kind, core_kind).then_or_else( + |builder| { + builder.assign(vk.clone(), recursive_vk_variable.clone()); + }, + |builder| { + builder.if_eq(kind, deferred_kind).then_or_else( + |builder| { + builder.assign(vk.clone(), deferred_vk_variable.clone()); + }, + |builder| { + builder.if_eq(kind, reduce_kind).then_or_else( + |builder| { + builder.assign(vk.clone(), compress_vk.clone()); + }, + |builder| { + // If the kind is not one of the valid values, raise + // an error. + builder.error(); + }, + ); + }, + ); + }, + ); + + // Verify the shard proof given the correct data. + + // Prepare a challenger. + let mut challenger = DuplexChallengerVariable::new(builder); + // Observe the vk and start pc. + challenger.observe(builder, vk.commitment.clone()); + challenger.observe(builder, vk.pc_start); + // Observe the main commitment and public values. + challenger.observe(builder, proof.commitment.main_commit.clone()); + for j in 0..machine.num_pv_elts() { + let element = builder.get(&proof.public_values, j); + challenger.observe(builder, element); + } + // verify proof. + StarkVerifier::::verify_shard( + builder, + &vk, + pcs, + machine, + &mut challenger, + &proof, + ); + + // Load the public values from the proof. + let current_public_values_elements = (0..RECURSIVE_PROOF_NUM_PV_ELTS) + .map(|i| builder.get(&proof.public_values, i)) + .collect::>>(); + + let current_public_values: &RecursionPublicValues> = + current_public_values_elements.as_slice().borrow(); + + // If the proof is the first proof, initialize the values. + builder.if_eq(i, C::N::zero()).then(|builder| { + // Initialize global and accumulated values. + + // Initialize the start of deferred digests. + for (digest, current_digest, global_digest) in izip!( + reconstruct_deferred_digest.iter(), + current_public_values + .start_reconstruct_deferred_digest + .iter(), + reduce_public_values + .start_reconstruct_deferred_digest + .iter() + ) { + builder.assign(*digest, *current_digest); + builder.assign(*global_digest, *current_digest); + } + + // Initialize the sp1_vk digest + for (digest, first_digest) in sp1_vk_digest + .iter() + .zip(current_public_values.sp1_vk_digest) + { + builder.assign(*digest, first_digest); + } + + // Initiallize start pc. + builder.assign( + reduce_public_values.start_pc, + current_public_values.start_pc, + ); + builder.assign(pc, current_public_values.start_pc); + + // Initialize start shard. + builder.assign(shard, current_public_values.start_shard); + builder.assign( + reduce_public_values.start_shard, + current_public_values.start_shard, + ); + + // Initialize the leaf challenger. + assign_challenger_from_pv( + builder, + &mut leaf_challenger, + current_public_values.leaf_challenger, + ); + // Initialize the reconstruct challenger. + assign_challenger_from_pv( + builder, + &mut initial_reconstruct_challenger, + current_public_values.start_reconstruct_challenger, + ); + assign_challenger_from_pv( + builder, + &mut reconstruct_challenger, + current_public_values.start_reconstruct_challenger, + ); + + // Assign the commited values and deferred proof digests. + for (word, current_word) in committed_value_digest + .iter() + .zip_eq(current_public_values.committed_value_digest.iter()) + { + for (byte, current_byte) in word.0.iter().zip_eq(current_word.0.iter()) { + builder.assign(*byte, *current_byte); + } + } + + for (digest, current_digest) in deferred_proofs_digest + .iter() + .zip_eq(current_public_values.deferred_proofs_digest.iter()) + { + builder.assign(*digest, *current_digest); + } + + // Initialize the start reconstruct deferred digest. + for (digest, first_digest, global_digest) in izip!( + reconstruct_deferred_digest.iter(), + current_public_values + .start_reconstruct_deferred_digest + .iter(), + reduce_public_values + .start_reconstruct_deferred_digest + .iter() + ) { + builder.assign(*digest, *first_digest); + builder.assign(*global_digest, *first_digest); + } + }); + + // Assert that the current values match the accumulated values. + + // Assert that the start deferred digest is equal to the current deferred digest. + for (digest, current_digest) in reconstruct_deferred_digest.iter().zip_eq( + current_public_values + .start_reconstruct_deferred_digest + .iter(), + ) { + builder.assert_felt_eq(*digest, *current_digest); + } + + // consistency checks for all accumulated values. + + // Assert that the sp1_vk digest is always the same. + for (digest, current) in sp1_vk_digest + .iter() + .zip(current_public_values.sp1_vk_digest) + { + builder.assert_felt_eq(*digest, current); + } + + // Assert that the start pc is equal to the current pc. + builder.assert_felt_eq(pc, current_public_values.start_pc); + // Verfiy that the shard is equal to the current shard. + // builder.assert_felt_eq(shard, current_public_values.start_shard); + // Assert that the leaf challenger is always the same. + + assert_challenger_eq_pv( + builder, + &leaf_challenger, + current_public_values.leaf_challenger, + ); + // Assert that the current challenger matches the start reconstruct challenger. + assert_challenger_eq_pv( + builder, + &reconstruct_challenger, + current_public_values.start_reconstruct_challenger, + ); + + // Assert that the commited digests are the same. + for (word, current_word) in committed_value_digest + .iter() + .zip_eq(current_public_values.committed_value_digest.iter()) + { + for (byte, current_byte) in word.0.iter().zip_eq(current_word.0.iter()) { + builder.assert_felt_eq(*byte, *current_byte); + } + } + + // Assert that the deferred proof digests are the same. + for (digest, current_digest) in deferred_proofs_digest + .iter() + .zip_eq(current_public_values.deferred_proofs_digest.iter()) + { + builder.assert_felt_eq(*digest, *current_digest); + } + + // Update the accumulated values. + + // Update the deffered proof digest. + for (digest, current_digest) in reconstruct_deferred_digest + .iter() + .zip_eq(current_public_values.end_reconstruct_deferred_digest.iter()) + { + builder.assign(*digest, *current_digest); + } + + // Update the accumulated values. + // Update pc to be the next pc. + builder.assign(pc, current_public_values.next_pc); + // Update the shard to be the next shard. + builder.assign(shard, current_public_values.next_shard); + // Update the reconstruct challenger. + assign_challenger_from_pv( + builder, + &mut reconstruct_challenger, + current_public_values.end_reconstruct_challenger, + ); + + // Update the cumulative sum. + for (sum_element, current_sum_element) in cumulative_sum + .iter() + .zip_eq(current_public_values.cumulative_sum.iter()) + { + builder.assign(*sum_element, *sum_element + *current_sum_element); + } + }); + + // Update the global values from the last accumulated values. + // Set sp1_vk digest to the one from the proof values. + reduce_public_values.sp1_vk_digest = sp1_vk_digest; + // Set next_pc to be the last pc (which is the same as accumulated pc) + reduce_public_values.next_pc = pc; + // Set next shard to be the last shard (which is the same as accumulated shard) + reduce_public_values.next_shard = shard; + // Set the leaf challenger to it's value. + let values = get_challenger_public_values(builder, &leaf_challenger); + reduce_public_values.leaf_challenger = values; + // Set the start reconstruct challenger to be the initial reconstruct challenger. + let values = get_challenger_public_values(builder, &initial_reconstruct_challenger); + reduce_public_values.start_reconstruct_challenger = values; + // Set the end reconstruct challenger to be the last reconstruct challenger. + let values = get_challenger_public_values(builder, &reconstruct_challenger); + reduce_public_values.end_reconstruct_challenger = values; + // Set the start reconstruct deferred digest to be the last reconstruct deferred digest. + reduce_public_values.end_reconstruct_deferred_digest = reconstruct_deferred_digest; + + // Assign the deffered proof digests. + reduce_public_values.deferred_proofs_digest = deferred_proofs_digest; + // Assign the committed value digests. + reduce_public_values.committed_value_digest = committed_value_digest; + // Assign the cumulative sum. + reduce_public_values.cumulative_sum = cumulative_sum; + + // If the proof is complete, make completeness assertions and set the flag. Otherwise, check + // the flag is zero and set the public value to zero. + builder.if_eq(is_complete, C::N::one()).then_or_else( + |builder| { + builder.assign(reduce_public_values.is_complete, C::F::one()); + assert_complete(builder, reduce_public_values, &reconstruct_challenger) + }, + |builder| { + builder.assert_var_eq(is_complete, C::N::zero()); + builder.assign(reduce_public_values.is_complete, C::F::zero()); + }, + ); + + // Commit the public values. + for value in reduce_public_values_stream { + builder.commit_public_value(value); + } + } +} diff --git a/recursion/program/src/machine/core.rs b/recursion/program/src/machine/core.rs new file mode 100644 index 0000000000..527533835a --- /dev/null +++ b/recursion/program/src/machine/core.rs @@ -0,0 +1,327 @@ +use std::array; +use std::borrow::BorrowMut; +use std::marker::PhantomData; + +use itertools::Itertools; +use p3_baby_bear::BabyBear; +use p3_commit::TwoAdicMultiplicativeCoset; +use p3_field::{AbstractField, PrimeField32, TwoAdicField}; +use sp1_core::air::{MachineAir, PublicValues}; +use sp1_core::air::{Word, POSEIDON_NUM_WORDS, PV_DIGEST_NUM_WORDS}; +use sp1_core::stark::StarkMachine; +use sp1_core::stark::{Com, RiscvAir, ShardProof, StarkGenericConfig, StarkVerifyingKey}; +use sp1_core::utils::BabyBearPoseidon2; +use sp1_recursion_compiler::config::InnerConfig; +use sp1_recursion_compiler::ir::{Array, Builder, Config, Ext, ExtConst, Felt, Var}; +use sp1_recursion_compiler::prelude::DslVariable; +use sp1_recursion_core::air::{RecursionPublicValues, RECURSIVE_PROOF_NUM_PV_ELTS}; +use sp1_recursion_core::runtime::{RecursionProgram, DIGEST_SIZE}; + +use sp1_recursion_compiler::prelude::*; + +use crate::challenger::{CanObserveVariable, DuplexChallengerVariable}; +use crate::fri::TwoAdicFriPcsVariable; +use crate::hints::Hintable; +use crate::stark::StarkVerifier; +use crate::types::ShardProofVariable; +use crate::types::VerifyingKeyVariable; +use crate::utils::{const_fri_config, felt2var, get_challenger_public_values, hash_vkey, var2felt}; + +use super::utils::assert_complete; + +/// A program for recursively verifying a batch of SP1 proofs. +#[derive(Debug, Clone, Copy)] +pub struct SP1RecursiveVerifier { + _phantom: PhantomData<(C, SC)>, +} + +pub struct SP1RecursionMemoryLayout<'a, SC: StarkGenericConfig, A: MachineAir> { + pub vk: &'a StarkVerifyingKey, + pub machine: &'a StarkMachine, + pub shard_proofs: Vec>, + pub leaf_challenger: &'a SC::Challenger, + pub initial_reconstruct_challenger: SC::Challenger, + pub is_complete: bool, +} + +#[derive(DslVariable, Clone)] +pub struct SP1RecursionMemoryLayoutVariable { + pub vk: VerifyingKeyVariable, + + pub shard_proofs: Array>, + + pub leaf_challenger: DuplexChallengerVariable, + pub initial_reconstruct_challenger: DuplexChallengerVariable, + + pub is_complete: Var, +} + +impl SP1RecursiveVerifier { + /// Create a new instance of the program for the [BabyBearPoseidon2] config. + pub fn build( + machine: &StarkMachine>, + ) -> RecursionProgram { + let mut builder = Builder::::default(); + + let input: SP1RecursionMemoryLayoutVariable<_> = builder.uninit(); + SP1RecursionMemoryLayout::>::witness(&input, &mut builder); + + let pcs = TwoAdicFriPcsVariable { + config: const_fri_config(&mut builder, machine.config().pcs().fri_config()), + }; + SP1RecursiveVerifier::verify(&mut builder, &pcs, machine, input); + + builder.compile_program() + } +} + +impl SP1RecursiveVerifier +where + C::F: PrimeField32 + TwoAdicField, + SC: StarkGenericConfig< + Val = C::F, + Challenge = C::EF, + Domain = TwoAdicMultiplicativeCoset, + >, + Com: Into<[SC::Val; DIGEST_SIZE]>, +{ + /// Verify a batch of SP1 shard proofs and aggregate their public values. + /// + /// This program represents a first recursive step in the verification of an SP1 proof + /// consisting of one or more shards. Each shard proof is verified and its public values are + /// aggregated into a single set representing the start and end state of the program execution + /// across all shards. + pub fn verify( + builder: &mut Builder, + pcs: &TwoAdicFriPcsVariable, + machine: &StarkMachine>, + input: SP1RecursionMemoryLayoutVariable, + ) { + let SP1RecursionMemoryLayoutVariable { + vk, + shard_proofs, + leaf_challenger, + initial_reconstruct_challenger, + is_complete, + } = input; + + // Initialize values we will commit to public outputs. + + // Start and end of program counters. + let start_pc: Felt<_> = builder.uninit(); + + // Start and end shard indices. + let initial_shard: Felt<_> = builder.uninit(); + + // The commited values digest and deferred proof digest. These will be checked to be the + // same for all proofs. + let committed_value_digest: [Word>; PV_DIGEST_NUM_WORDS] = + array::from_fn(|_| Word(array::from_fn(|_| builder.uninit()))); + let deferred_proofs_digest: [Felt<_>; POSEIDON_NUM_WORDS] = + array::from_fn(|_| builder.uninit()); + + // Assert that the number of proofs is not zero. + builder.assert_usize_ne(shard_proofs.len(), 0); + + let leaf_challenger_public_values = get_challenger_public_values(builder, &leaf_challenger); + + // Initialize loop variables. + let current_shard: Felt<_> = builder.uninit(); + let mut reconstruct_challenger: DuplexChallengerVariable<_> = + initial_reconstruct_challenger.copy(builder); + let cumulative_sum: Ext<_, _> = builder.eval(C::EF::zero().cons()); + let current_pc: Felt<_> = builder.uninit(); + let exit_code: Felt<_> = builder.uninit(); + // Verify proofs, validate transitions, and update accumulation variables. + builder.range(0, shard_proofs.len()).for_each(|i, builder| { + // Load the proof. + let proof = builder.get(&shard_proofs, i); + + // Verify the shard proof. + let mut challenger = leaf_challenger.copy(builder); + StarkVerifier::::verify_shard( + builder, + &vk, + pcs, + machine, + &mut challenger, + &proof, + ); + + // Extract public values. + let mut pv_elements = Vec::new(); + for i in 0..machine.num_pv_elts() { + let element = builder.get(&proof.public_values, i); + pv_elements.push(element); + } + let public_values = PublicValues::>, Felt<_>>::from_vec(pv_elements); + + // If this is the first proof in the batch, verify the initial conditions. + builder.if_eq(i, C::N::zero()).then(|builder| { + // Initialize the values of accumulated variables. + + // Shard. + builder.assign(initial_shard, public_values.shard); + builder.assign(current_shard, public_values.shard); + + // Program counter. + builder.assign(start_pc, public_values.start_pc); + builder.assign(current_pc, public_values.start_pc); + + // Commited public values digests. + for (word, first_word) in committed_value_digest + .iter() + .zip_eq(public_values.committed_value_digest.iter()) + { + for (byte, first_byte) in word.0.iter().zip_eq(first_word.0.iter()) { + builder.assign(*byte, *first_byte); + } + } + + // Deferred proofs digests. + for (digest, first_digest) in deferred_proofs_digest + .iter() + .zip_eq(public_values.deferred_proofs_digest.iter()) + { + builder.assign(*digest, *first_digest); + } + + // Exit code. + builder.assign(exit_code, public_values.exit_code); + }); + + // If the shard is zero, verify the global initial conditions hold on challenger and pc. + let shard = felt2var(builder, public_values.shard); + builder.if_eq(shard, C::N::one()).then(|builder| { + // This should be the first proof as well + builder.assert_var_eq(i, C::N::zero()); + + // Start pc should be vk.pc_start + builder.assert_felt_eq(public_values.start_pc, vk.pc_start); + + // Assert that the initial challenger is equal to a fresh challenger observing the + // verifier key and the initial pc. + let mut first_initial_challenger = DuplexChallengerVariable::new(builder); + + first_initial_challenger.observe(builder, vk.commitment.clone()); + first_initial_challenger.observe(builder, vk.pc_start); + + // Make sure the start reconstruct challenger is correct, since we will + // commit to it in public values. + initial_reconstruct_challenger.assert_eq(builder, &first_initial_challenger); + }); + + // Assert compatibility of the shard values. + for (word, current_word) in committed_value_digest + .iter() + .zip_eq(public_values.committed_value_digest.iter()) + { + for (byte, current_byte) in word.0.iter().zip_eq(current_word.0.iter()) { + builder.assert_felt_eq(*byte, *current_byte); + } + } + + // Assert that the start_pc of the proof is equal to the current pc. + builder.assert_felt_eq(current_pc, public_values.start_pc); + // Assert that the next_pc is different from the start_pc. + builder.assert_felt_ne(public_values.start_pc, public_values.next_pc); + // Assert that the start_pc is not zero (this means program has halted in a non-last + // shard). + builder.assert_felt_ne(public_values.start_pc, C::F::zero()); + + // Assert that the shard of the proof is equal to the current shard. + builder.assert_felt_eq(current_shard, public_values.shard); + + // Assert that exit code is the same for all proofs. + builder.assert_felt_eq(exit_code, public_values.exit_code); + + // Assert that the committed value digests are all the same. + + // Assert that the deferred proof digest is the same for all proofs. + for (digest, current_digest) in deferred_proofs_digest + .iter() + .zip_eq(public_values.deferred_proofs_digest.iter()) + { + builder.assert_felt_eq(*digest, *current_digest); + } + + // Update the reconstruct challenger, cumulative sum, shard number, and program counter. + reconstruct_challenger.observe(builder, proof.commitment.main_commit); + for j in 0..machine.num_pv_elts() { + let element = builder.get(&proof.public_values, j); + reconstruct_challenger.observe(builder, element); + } + + // Increment the shard count by one. + builder.assign(current_shard, current_shard + C::F::one()); + + // Update current_pc to be the end_pc of the current proof. + builder.assign(current_pc, public_values.next_pc); + + // Cumulative sum is updated by sums of all chips. + let opened_values = proof.opened_values.chips; + builder + .range(0, opened_values.len()) + .for_each(|k, builder| { + let values = builder.get(&opened_values, k); + let sum = values.cumulative_sum; + builder.assign(cumulative_sum, cumulative_sum + sum); + }); + }); + + // Compute vk digest. + let vk_digest = hash_vkey(builder, &vk); + let vk_digest: [Felt<_>; DIGEST_SIZE] = array::from_fn(|i| builder.get(&vk_digest, i)); + + // Collect values for challenges. + let initial_challenger_public_values = + get_challenger_public_values(builder, &initial_reconstruct_challenger); + let final_challenger_public_values = + get_challenger_public_values(builder, &reconstruct_challenger); + + let cumulative_sum_arrray = builder.ext2felt(cumulative_sum); + let cumulative_sum_arrray = array::from_fn(|i| builder.get(&cumulative_sum_arrray, i)); + + let zero: Felt<_> = builder.eval(C::F::zero()); + // Initialize the public values we will commit to. + let mut recursion_public_values_stream = [zero; RECURSIVE_PROOF_NUM_PV_ELTS]; + + let recursion_public_values: &mut RecursionPublicValues<_> = + recursion_public_values_stream.as_mut_slice().borrow_mut(); + + let start_deferred_digest = [zero; POSEIDON_NUM_WORDS]; + let end_deferred_digest = [zero; POSEIDON_NUM_WORDS]; + + let is_complete_felt = var2felt(builder, is_complete); + + recursion_public_values.committed_value_digest = committed_value_digest; + recursion_public_values.deferred_proofs_digest = deferred_proofs_digest; + recursion_public_values.start_pc = start_pc; + recursion_public_values.next_pc = current_pc; + recursion_public_values.start_shard = initial_shard; + recursion_public_values.next_shard = current_shard; + recursion_public_values.sp1_vk_digest = vk_digest; + recursion_public_values.leaf_challenger = leaf_challenger_public_values; + recursion_public_values.start_reconstruct_challenger = initial_challenger_public_values; + recursion_public_values.end_reconstruct_challenger = final_challenger_public_values; + recursion_public_values.cumulative_sum = cumulative_sum_arrray; + recursion_public_values.start_reconstruct_deferred_digest = start_deferred_digest; + recursion_public_values.end_reconstruct_deferred_digest = end_deferred_digest; + recursion_public_values.exit_code = zero; + recursion_public_values.is_complete = is_complete_felt; + + // If the proof represents a complete proof, make completeness assertions. + // + // *Remark*: In this program, this only happends if there is one shard and the program has + // no deferred proofs to verify. However, the completeness check is independent of these + // facts. + builder.if_eq(is_complete, C::N::one()).then(|builder| { + assert_complete(builder, recursion_public_values, &reconstruct_challenger) + }); + + // Commit to the public values. + for value in recursion_public_values_stream { + builder.commit_public_value(value); + } + } +} diff --git a/recursion/program/src/machine/deferred.rs b/recursion/program/src/machine/deferred.rs new file mode 100644 index 0000000000..206cb6fae4 --- /dev/null +++ b/recursion/program/src/machine/deferred.rs @@ -0,0 +1,291 @@ +use std::array; +use std::borrow::{Borrow, BorrowMut}; +use std::marker::PhantomData; + +use p3_air::Air; +use p3_baby_bear::BabyBear; +use p3_commit::TwoAdicMultiplicativeCoset; +use p3_field::{AbstractField, PrimeField32, TwoAdicField}; +use sp1_core::air::{MachineAir, WORD_SIZE}; +use sp1_core::air::{Word, POSEIDON_NUM_WORDS, PV_DIGEST_NUM_WORDS}; +use sp1_core::stark::StarkMachine; +use sp1_core::stark::{Com, RiscvAir, ShardProof, StarkGenericConfig, StarkVerifyingKey}; +use sp1_core::utils::BabyBearPoseidon2; +use sp1_recursion_compiler::config::InnerConfig; +use sp1_recursion_compiler::ir::{Array, Builder, Config, Felt, Var}; +use sp1_recursion_compiler::prelude::DslVariable; +use sp1_recursion_core::air::{RecursionPublicValues, RECURSIVE_PROOF_NUM_PV_ELTS}; +use sp1_recursion_core::runtime::{RecursionProgram, DIGEST_SIZE}; + +use sp1_recursion_compiler::prelude::*; + +use crate::challenger::{CanObserveVariable, DuplexChallengerVariable}; +use crate::fri::TwoAdicFriPcsVariable; +use crate::hints::Hintable; +use crate::stark::{RecursiveVerifierConstraintFolder, StarkVerifier}; +use crate::types::ShardProofVariable; +use crate::types::VerifyingKeyVariable; +use crate::utils::{const_fri_config, get_challenger_public_values, hash_vkey, var2felt}; + +#[derive(Debug, Clone, Copy)] +pub struct SP1DeferredVerifier { + _phantom: PhantomData<(C, SC, A)>, +} + +/// Inputs that are hinted to the [SP1DeferredVerifier] program. +pub struct SP1DeferredMemoryLayout<'a, SC: StarkGenericConfig, A: MachineAir> +where + SC::Val: PrimeField32, +{ + pub compress_vk: &'a StarkVerifyingKey, + pub machine: &'a StarkMachine, + pub proofs: Vec>, + + pub start_reconstruct_deferred_digest: Vec, + + pub is_complete: bool, + + pub sp1_vk: &'a StarkVerifyingKey, + pub sp1_machine: &'a StarkMachine>, + pub committed_value_digest: Vec>, + pub deferred_proofs_digest: Vec, + pub leaf_challenger: SC::Challenger, + pub end_pc: SC::Val, + pub end_shard: SC::Val, +} + +/// A variable version of the [SP1DeferredMemoryLayout] struct. +#[derive(DslVariable, Clone)] +pub struct SP1DeferredMemoryLayoutVariable { + pub compress_vk: VerifyingKeyVariable, + + pub proofs: Array>, + + pub start_reconstruct_deferred_digest: Array>, + + pub is_complete: Var, + + pub sp1_vk: VerifyingKeyVariable, + pub committed_value_digest: Array>>, + pub deferred_proofs_digest: Array>, + pub leaf_challenger: DuplexChallengerVariable, + pub end_pc: Felt, + pub end_shard: Felt, +} + +impl SP1DeferredVerifier +where + A: MachineAir + for<'a> Air>, +{ + /// Create a new instance of the program for the [BabyBearPoseidon2] config. + pub fn build(machine: &StarkMachine) -> RecursionProgram { + let mut builder = Builder::::default(); + let input: SP1DeferredMemoryLayoutVariable<_> = builder.uninit(); + SP1DeferredMemoryLayout::::witness(&input, &mut builder); + + let pcs = TwoAdicFriPcsVariable { + config: const_fri_config(&mut builder, machine.config().pcs().fri_config()), + }; + + SP1DeferredVerifier::verify(&mut builder, &pcs, machine, input); + + builder.compile_program() + } +} + +impl SP1DeferredVerifier +where + C::F: PrimeField32 + TwoAdicField, + SC: StarkGenericConfig< + Val = C::F, + Challenge = C::EF, + Domain = TwoAdicMultiplicativeCoset, + >, + A: MachineAir + for<'a> Air>, + Com: Into<[SC::Val; DIGEST_SIZE]>, +{ + /// Verify a batch of deferred proofs. + /// + /// Each deferred proof is a recursive proof representing some computation. Namely, every such + /// proof represents a recursively verified program. + /// verifier: + /// - Asserts that each of these proofs is valid as a `compress` proof. + /// - Asserts that each of these proofs is complete by checking the `is_complete` flag in the + /// proof's public values. + /// - Aggregates the proof information into an accumulated deferred digest. + pub fn verify( + builder: &mut Builder, + pcs: &TwoAdicFriPcsVariable, + machine: &StarkMachine, + input: SP1DeferredMemoryLayoutVariable, + ) { + // Read the inputs. + let SP1DeferredMemoryLayoutVariable { + compress_vk, + proofs, + start_reconstruct_deferred_digest, + is_complete, + + sp1_vk, + committed_value_digest, + deferred_proofs_digest, + leaf_challenger, + end_pc, + end_shard, + } = input; + + // Initialize the values for the aggregated public output as all zeros. + let mut deferred_public_values_stream: Vec> = (0..RECURSIVE_PROOF_NUM_PV_ELTS) + .map(|_| builder.eval(C::F::zero())) + .collect(); + + let deferred_public_values: &mut RecursionPublicValues<_> = + deferred_public_values_stream.as_mut_slice().borrow_mut(); + + // Compute the digest of compress_vk and input the value to the public values. + let compress_vk_digest = hash_vkey(builder, &compress_vk); + + deferred_public_values.compress_vk_digest = + array::from_fn(|i| builder.get(&compress_vk_digest, i)); + + // Initialize the start of deferred digests. + deferred_public_values.start_reconstruct_deferred_digest = + array::from_fn(|i| builder.get(&start_reconstruct_deferred_digest, i)); + + // Assert that there is at least one proof. + builder.assert_usize_ne(proofs.len(), 0); + + // Initialize the consistency check variable. + let mut reconstruct_deferred_digest = builder.array(POSEIDON_NUM_WORDS); + for (i, first_digest) in deferred_public_values + .start_reconstruct_deferred_digest + .iter() + .enumerate() + { + builder.set(&mut reconstruct_deferred_digest, i, *first_digest); + } + + // Verify the proofs and connect the values. + builder.range(0, proofs.len()).for_each(|i, builder| { + // Load the proof. + let proof = builder.get(&proofs, i); + + // Verify the shard proof. + + // Prepare a challenger. + let mut challenger = DuplexChallengerVariable::new(builder); + // Observe the vk and start pc. + challenger.observe(builder, compress_vk.commitment.clone()); + challenger.observe(builder, compress_vk.pc_start); + // Observe the main commitment and public values. + challenger.observe(builder, proof.commitment.main_commit.clone()); + for j in 0..machine.num_pv_elts() { + let element = builder.get(&proof.public_values, j); + challenger.observe(builder, element); + } + // verify the proof. + StarkVerifier::::verify_shard( + builder, + &compress_vk, + pcs, + machine, + &mut challenger, + &proof, + ); + + // Load the public values from the proof. + let current_public_values_elements = (0..RECURSIVE_PROOF_NUM_PV_ELTS) + .map(|i| builder.get(&proof.public_values, i)) + .collect::>>(); + + let current_public_values: &RecursionPublicValues> = + current_public_values_elements.as_slice().borrow(); + + // Assert that the proof is complete. + builder.assert_felt_eq(current_public_values.is_complete, C::F::one()); + + // Assert that the compress_vk digest is the same. + for (digest, current) in deferred_public_values + .compress_vk_digest + .iter() + .zip(current_public_values.compress_vk_digest.iter()) + { + builder.assert_felt_eq(*digest, *current); + } + + // Update deferred proof digest + // poseidon2( current_digest[..8] || pv.sp1_vk_digest[..8] || pv.committed_value_digest[..32] ) + let mut poseidon_inputs = builder.array(48); + for j in 0..DIGEST_SIZE { + let current_digest_element = builder.get(&reconstruct_deferred_digest, j); + builder.set(&mut poseidon_inputs, j, current_digest_element); + } + + for j in 0..DIGEST_SIZE { + // let input_index: Var<_> = builder.constant(F::from_canonical_usize(j + 8)); + builder.set( + &mut poseidon_inputs, + j + DIGEST_SIZE, + current_public_values.sp1_vk_digest[j], + ); + } + for j in 0..PV_DIGEST_NUM_WORDS { + for k in 0..WORD_SIZE { + // let input_index: Var<_> = + // builder.eval(F::from_canonical_usize(j * WORD_SIZE + k + 16)); + let element = current_public_values.committed_value_digest[j][k]; + builder.set(&mut poseidon_inputs, j * WORD_SIZE + k + 16, element); + } + } + let new_digest = builder.poseidon2_hash(&poseidon_inputs); + for j in 0..DIGEST_SIZE { + let new_value = builder.get(&new_digest, j); + builder.set(&mut reconstruct_deferred_digest, j, new_value); + } + }); + + // Set the public values. + + // Set initial_pc, end_pc, initial_shard, and end_shard to be the hitned values. + deferred_public_values.start_pc = end_pc; + deferred_public_values.next_pc = end_pc; + deferred_public_values.start_shard = end_shard; + deferred_public_values.next_shard = end_shard; + + // Set the sp1_vk_digest to be the hitned value. + let sp1_vk_digest = hash_vkey(builder, &sp1_vk); + deferred_public_values.sp1_vk_digest = array::from_fn(|i| builder.get(&sp1_vk_digest, i)); + + // Set the committed value digest to be the hitned value. + for (i, public_word) in deferred_public_values + .committed_value_digest + .iter_mut() + .enumerate() + { + let hinted_word = builder.get(&committed_value_digest, i); + public_word.0 = array::from_fn(|j| builder.get(&hinted_word, j)); + } + + // Set the deferred proof digest to be the hitned value. + deferred_public_values.deferred_proofs_digest = + core::array::from_fn(|i| builder.get(&deferred_proofs_digest, i)); + + // Set the initial, end, and leaf challenger to be the hitned values. + let values = get_challenger_public_values(builder, &leaf_challenger); + deferred_public_values.leaf_challenger = values; + deferred_public_values.start_reconstruct_challenger = values; + deferred_public_values.end_reconstruct_challenger = values; + + // Assign the deffered proof digests. + deferred_public_values.end_reconstruct_deferred_digest = + array::from_fn(|i| builder.get(&reconstruct_deferred_digest, i)); + + // Set the is_complete flag. + deferred_public_values.is_complete = var2felt(builder, is_complete); + + // Commit the public values. + for value in deferred_public_values_stream { + builder.commit_public_value(value); + } + } +} diff --git a/recursion/program/src/machine/mod.rs b/recursion/program/src/machine/mod.rs new file mode 100644 index 0000000000..2d262332a0 --- /dev/null +++ b/recursion/program/src/machine/mod.rs @@ -0,0 +1,421 @@ +mod compress; +mod core; +mod deferred; +mod root; +mod utils; + +pub use compress::*; +pub use core::*; +pub use deferred::*; +pub use root::*; + +#[cfg(test)] +mod tests { + + use p3_baby_bear::BabyBear; + use p3_challenger::CanObserve; + use p3_maybe_rayon::prelude::*; + use sp1_core::stark::{MachineVerificationError, RiscvAir, StarkGenericConfig}; + use sp1_core::utils::BabyBearPoseidon2; + use sp1_core::{ + io::SP1Stdin, + runtime::Program, + stark::{Challenge, LocalProver}, + }; + use sp1_recursion_compiler::config::InnerConfig; + use sp1_recursion_core::{ + runtime::Runtime, + stark::{config::BabyBearPoseidon2Outer, RecursionAir}, + }; + + use crate::hints::Hintable; + + use super::*; + + enum Test { + Recursion, + Reduce, + Compress, + Wrap, + } + + fn test_sp1_recursive_machine_verify(program: Program, batch_size: usize, test: Test) { + type SC = BabyBearPoseidon2; + type F = BabyBear; + type EF = Challenge; + + sp1_core::utils::setup_logger(); + + let machine = RiscvAir::machine(SC::default()); + let (_, vk) = machine.setup(&program); + + // Make the recursion program. + let recursive_program = SP1RecursiveVerifier::::build(&machine); + let recursive_config = SC::default(); + type A = RecursionAir; + let recursive_machine = A::machine(recursive_config.clone()); + let (rec_pk, rec_vk) = recursive_machine.setup(&recursive_program); + + // Make the deferred program. + let deferred_program = SP1DeferredVerifier::::build(&recursive_machine); + let (_, deferred_vk) = recursive_machine.setup(&deferred_program); + + // Make the compress program. + let reduce_program = SP1CompressVerifier::::build( + &recursive_machine, + &rec_vk, + &deferred_vk, + ); + + let (reduce_pk, compress_vk) = recursive_machine.setup(&reduce_program); + + // Make the compress program. + let compress_machine = RecursionAir::<_, 9>::machine(SC::compressed()); + let compress_program = + SP1RootVerifier::::build(&recursive_machine, &compress_vk, true); + let (compress_pk, compress_vk) = compress_machine.setup(&compress_program); + + // Make the wrap program. + let wrap_machine = RecursionAir::<_, 5>::machine(BabyBearPoseidon2Outer::default()); + let wrap_program = + SP1RootVerifier::::build(&compress_machine, &compress_vk, false); + + let mut challenger = machine.config().challenger(); + let time = std::time::Instant::now(); + let (proof, _) = sp1_core::utils::run_and_prove(program, &SP1Stdin::new(), SC::default()); + machine.verify(&vk, &proof, &mut challenger).unwrap(); + tracing::info!("Proof generated successfully"); + let elapsed = time.elapsed(); + tracing::info!("Execution proof time: {:?}", elapsed); + + // Get the and leaf challenger. + let mut leaf_challenger = machine.config().challenger(); + vk.observe_into(&mut leaf_challenger); + proof.shard_proofs.iter().for_each(|proof| { + leaf_challenger.observe(proof.commitment.main_commit); + leaf_challenger.observe_slice(&proof.public_values[0..machine.num_pv_elts()]); + }); + // Make sure leaf challenger is not mutable anymore. + let leaf_challenger = leaf_challenger; + + let mut layouts = Vec::new(); + + let mut reconstruct_challenger = machine.config().challenger(); + vk.observe_into(&mut reconstruct_challenger); + + let is_complete = proof.shard_proofs.len() == 1; + for batch in proof.shard_proofs.chunks(batch_size) { + let proofs = batch.to_vec(); + + layouts.push(SP1RecursionMemoryLayout { + vk: &vk, + machine: &machine, + shard_proofs: proofs, + leaf_challenger: &leaf_challenger, + initial_reconstruct_challenger: reconstruct_challenger.clone(), + is_complete, + }); + + for proof in batch.iter() { + reconstruct_challenger.observe(proof.commitment.main_commit); + reconstruct_challenger + .observe_slice(&proof.public_values[0..machine.num_pv_elts()]); + } + } + + assert_eq!( + reconstruct_challenger.sponge_state, + leaf_challenger.sponge_state + ); + assert_eq!( + reconstruct_challenger.input_buffer, + leaf_challenger.input_buffer + ); + assert_eq!( + reconstruct_challenger.output_buffer, + leaf_challenger.output_buffer + ); + + // Run the recursion programs. + let mut records = Vec::new(); + + for layout in layouts { + let mut runtime = + Runtime::::new(&recursive_program, machine.config().perm.clone()); + + let mut witness_stream = Vec::new(); + witness_stream.extend(layout.write()); + + runtime.witness_stream = witness_stream.into(); + runtime.run(); + runtime.print_stats(); + + records.push(runtime.record); + } + + // Prove all recursion programs and verify the recursive proofs. + + // Make the recursive proofs. + let time = std::time::Instant::now(); + let recursive_proofs = records + .into_par_iter() + .map(|record| { + let mut recursive_challenger = recursive_machine.config().challenger(); + recursive_machine.prove::>( + &rec_pk, + record, + &mut recursive_challenger, + ) + }) + .collect::>(); + let elapsed = time.elapsed(); + tracing::info!("Recursive first layer proving time: {:?}", elapsed); + + // Verify the recursive proofs. + for rec_proof in recursive_proofs.iter() { + let mut recursive_challenger = recursive_machine.config().challenger(); + let result = recursive_machine.verify(&rec_vk, rec_proof, &mut recursive_challenger); + + match result { + Ok(_) => tracing::info!("Proof verified successfully"), + Err(MachineVerificationError::NonZeroCumulativeSum) => { + tracing::info!("Proof verification failed: NonZeroCumulativeSum") + } + e => panic!("Proof verification failed: {:?}", e), + } + } + if let Test::Recursion = test { + return; + } + + tracing::info!("Recursive proofs verified successfully"); + + // Chain all the individual shard proofs. + let mut recursive_proofs = recursive_proofs + .into_iter() + .flat_map(|proof| proof.shard_proofs) + .collect::>(); + + // Iterate over the recursive proof batches until there is one proof remaining. + let mut is_first_layer = true; + let mut is_complete; + let time = std::time::Instant::now(); + loop { + tracing::info!("Recursive proofs: {}", recursive_proofs.len()); + is_complete = recursive_proofs.len() <= batch_size; + recursive_proofs = recursive_proofs + .par_chunks(batch_size) + .map(|batch| { + let kind = if is_first_layer { + ReduceProgramType::Core + } else { + ReduceProgramType::Reduce + }; + let kinds = batch.iter().map(|_| kind).collect::>(); + let input = SP1ReduceMemoryLayout { + compress_vk: &compress_vk, + recursive_machine: &recursive_machine, + shard_proofs: batch.to_vec(), + kinds, + is_complete, + }; + + let mut runtime = Runtime::::new( + &reduce_program, + recursive_machine.config().perm.clone(), + ); + + let mut witness_stream = Vec::new(); + witness_stream.extend(input.write()); + + runtime.witness_stream = witness_stream.into(); + runtime.run(); + runtime.print_stats(); + + let mut recursive_challenger = recursive_machine.config().challenger(); + let mut proof = recursive_machine.prove::>( + &reduce_pk, + runtime.record, + &mut recursive_challenger, + ); + let mut recursive_challenger = recursive_machine.config().challenger(); + let result = + recursive_machine.verify(&compress_vk, &proof, &mut recursive_challenger); + + match result { + Ok(_) => tracing::info!("Proof verified successfully"), + Err(MachineVerificationError::NonZeroCumulativeSum) => { + tracing::info!("Proof verification failed: NonZeroCumulativeSum") + } + e => panic!("Proof verification failed: {:?}", e), + } + + assert_eq!(proof.shard_proofs.len(), 1); + proof.shard_proofs.pop().unwrap() + }) + .collect(); + is_first_layer = false; + + if recursive_proofs.len() == 1 { + break; + } + } + let elapsed = time.elapsed(); + tracing::info!("Reduction successful, time: {:?}", elapsed); + if let Test::Reduce = test { + return; + } + + assert_eq!(recursive_proofs.len(), 1); + let reduce_proof = recursive_proofs.pop().unwrap(); + + // Make the compress proof. + let input = SP1RootMemoryLayout { + machine: &recursive_machine, + proof: reduce_proof, + is_reduce: true, + }; + + // Run the compress program. + let mut runtime = + Runtime::::new(&compress_program, compress_machine.config().perm.clone()); + + let mut witness_stream = Vec::new(); + witness_stream.extend(input.write()); + + runtime.witness_stream = witness_stream.into(); + runtime.run(); + runtime.print_stats(); + tracing::info!("Compress program executed successfully"); + + // Prove the compress program. + let mut compress_challenger = compress_machine.config().challenger(); + + let time = std::time::Instant::now(); + let mut compress_proof = compress_machine.prove::>( + &compress_pk, + runtime.record, + &mut compress_challenger, + ); + let elapsed = time.elapsed(); + tracing::info!("Compress proving time: {:?}", elapsed); + let mut compress_challenger = compress_machine.config().challenger(); + let result = + compress_machine.verify(&compress_vk, &compress_proof, &mut compress_challenger); + match result { + Ok(_) => tracing::info!("Proof verified successfully"), + Err(MachineVerificationError::NonZeroCumulativeSum) => { + tracing::info!("Proof verification failed: NonZeroCumulativeSum") + } + e => panic!("Proof verification failed: {:?}", e), + } + + if let Test::Compress = test { + return; + } + + // Run and prove the wrap program. + + let (wrap_pk, wrap_vk) = wrap_machine.setup(&wrap_program); + + let compress_proof = compress_proof.shard_proofs.pop().unwrap(); + let input = SP1RootMemoryLayout { + machine: &compress_machine, + proof: compress_proof, + is_reduce: false, + }; + + // Run the compress program. + let mut runtime = + Runtime::::new(&wrap_program, compress_machine.config().perm.clone()); + + let mut witness_stream = Vec::new(); + witness_stream.extend(input.write()); + + runtime.witness_stream = witness_stream.into(); + runtime.run(); + runtime.print_stats(); + tracing::info!("Wrap program executed successfully"); + + // Prove the wrap program. + let mut wrap_challenger = wrap_machine.config().challenger(); + let time = std::time::Instant::now(); + let wrap_proof = + wrap_machine.prove::>(&wrap_pk, runtime.record, &mut wrap_challenger); + let elapsed = time.elapsed(); + tracing::info!("Wrap proving time: {:?}", elapsed); + let mut wrap_challenger = wrap_machine.config().challenger(); + let result = wrap_machine.verify(&wrap_vk, &wrap_proof, &mut wrap_challenger); + match result { + Ok(_) => tracing::info!("Proof verified successfully"), + Err(MachineVerificationError::NonZeroCumulativeSum) => { + tracing::info!("Proof verification failed: NonZeroCumulativeSum") + } + e => panic!("Proof verification failed: {:?}", e), + } + tracing::info!("Wrapping successful"); + } + + #[test] + fn test_sp1_recursive_machine_verify_fibonacci() { + let elf = include_bytes!("../../../../tests/fibonacci/elf/riscv32im-succinct-zkvm-elf"); + test_sp1_recursive_machine_verify(Program::from(elf), 1, Test::Recursion) + } + + #[test] + #[ignore] + fn test_sp1_reduce_machine_verify_fibonacci() { + let elf = include_bytes!("../../../../tests/fibonacci/elf/riscv32im-succinct-zkvm-elf"); + test_sp1_recursive_machine_verify(Program::from(elf), 1, Test::Reduce) + } + + #[test] + #[ignore] + fn test_sp1_compress_machine_verify_fibonacci() { + let elf = include_bytes!("../../../../tests/fibonacci/elf/riscv32im-succinct-zkvm-elf"); + test_sp1_recursive_machine_verify(Program::from(elf), 1, Test::Compress) + } + + #[test] + #[ignore] + fn test_sp1_wrap_machine_verify_fibonacci() { + let elf = include_bytes!("../../../../tests/fibonacci/elf/riscv32im-succinct-zkvm-elf"); + test_sp1_recursive_machine_verify(Program::from(elf), 1, Test::Wrap) + } + + #[test] + #[ignore] + fn test_sp1_reduce_machine_verify_tendermint() { + let elf = include_bytes!( + "../../../../tests/tendermint-benchmark/elf/riscv32im-succinct-zkvm-elf" + ); + test_sp1_recursive_machine_verify(Program::from(elf), 2, Test::Reduce) + } + + #[test] + #[ignore] + fn test_sp1_recursive_machine_verify_tendermint() { + let elf = include_bytes!( + "../../../../tests/tendermint-benchmark/elf/riscv32im-succinct-zkvm-elf" + ); + test_sp1_recursive_machine_verify(Program::from(elf), 2, Test::Recursion) + } + + #[test] + #[ignore] + fn test_sp1_compress_machine_verify_tendermint() { + let elf = include_bytes!( + "../../../../tests/tendermint-benchmark/elf/riscv32im-succinct-zkvm-elf" + ); + test_sp1_recursive_machine_verify(Program::from(elf), 2, Test::Compress) + } + + #[test] + #[ignore] + fn test_sp1_wrap_machine_verify_tendermint() { + let elf = include_bytes!( + "../../../../tests/tendermint-benchmark/elf/riscv32im-succinct-zkvm-elf" + ); + test_sp1_recursive_machine_verify(Program::from(elf), 2, Test::Wrap) + } +} diff --git a/recursion/program/src/machine/root.rs b/recursion/program/src/machine/root.rs new file mode 100644 index 0000000000..16dfc3993f --- /dev/null +++ b/recursion/program/src/machine/root.rs @@ -0,0 +1,139 @@ +use std::borrow::Borrow; + +use p3_air::Air; +use p3_baby_bear::BabyBear; +use p3_commit::TwoAdicMultiplicativeCoset; +use p3_field::{AbstractField, PrimeField32, TwoAdicField}; +use sp1_core::air::MachineAir; +use sp1_core::stark::StarkMachine; +use sp1_core::stark::{Com, ShardProof, StarkGenericConfig, StarkVerifyingKey}; +use sp1_core::utils::BabyBearPoseidon2; +use sp1_recursion_compiler::config::InnerConfig; +use sp1_recursion_compiler::ir::{Builder, Config, Felt, Var}; +use sp1_recursion_compiler::prelude::DslVariable; +use sp1_recursion_core::air::{RecursionPublicValues, RECURSIVE_PROOF_NUM_PV_ELTS}; +use sp1_recursion_core::runtime::{RecursionProgram, DIGEST_SIZE}; + +use sp1_recursion_compiler::prelude::*; + +use crate::challenger::{CanObserveVariable, DuplexChallengerVariable}; +use crate::fri::TwoAdicFriPcsVariable; +use crate::hints::Hintable; +use crate::machine::utils::proof_data_from_vk; +use crate::stark::{RecursiveVerifierConstraintFolder, ShardProofHint, StarkVerifier}; +use crate::types::ShardProofVariable; +use crate::utils::{const_fri_config, hash_vkey}; + +/// The program that gets a final verifier at the root of the tree. +#[derive(Debug, Clone, Copy)] +pub struct SP1RootVerifier { + _phantom: std::marker::PhantomData<(C, SC, A)>, +} + +pub struct SP1RootMemoryLayout<'a, SC: StarkGenericConfig, A: MachineAir> { + pub machine: &'a StarkMachine, + pub proof: ShardProof, + pub is_reduce: bool, +} + +#[derive(DslVariable, Clone)] +pub struct SP1RootMemoryLayoutVariable { + pub proof: ShardProofVariable, + pub is_reduce: Var, +} + +impl SP1RootVerifier +where + A: MachineAir + for<'a> Air>, +{ + /// Create a new instance of the program for the [BabyBearPoseidon2] config. + pub fn build( + machine: &StarkMachine, + vk: &StarkVerifyingKey, + is_compress: bool, + ) -> RecursionProgram { + let mut builder = Builder::::default(); + let proof: ShardProofVariable<_> = builder.uninit(); + ShardProofHint::::witness(&proof, &mut builder); + + let pcs = TwoAdicFriPcsVariable { + config: const_fri_config(&mut builder, machine.config().pcs().fri_config()), + }; + + SP1RootVerifier::verify(&mut builder, &pcs, machine, vk, &proof, is_compress); + + builder.compile_program() + } +} + +impl SP1RootVerifier +where + C::F: PrimeField32 + TwoAdicField, + SC: StarkGenericConfig< + Val = C::F, + Challenge = C::EF, + Domain = TwoAdicMultiplicativeCoset, + >, + A: MachineAir + for<'a> Air>, + Com: Into<[SC::Val; DIGEST_SIZE]>, +{ + /// Verify a proof with given vk and aggregate their public values. + /// + /// is_reduce : if the proof is a reduce proof, we will assert that the given vk indentifies + /// with the reduce vk digest of public inputs. + pub fn verify( + builder: &mut Builder, + pcs: &TwoAdicFriPcsVariable, + machine: &StarkMachine, + vk: &StarkVerifyingKey, + proof: &ShardProofVariable, + is_compress: bool, + ) { + // Get the verifying key info from the vk. + let vk = proof_data_from_vk(builder, vk, machine); + + // Verify the proof. + + let mut challenger = DuplexChallengerVariable::new(builder); + // Observe the vk and start pc. + challenger.observe(builder, vk.commitment.clone()); + challenger.observe(builder, vk.pc_start); + // Observe the main commitment and public values. + challenger.observe(builder, proof.commitment.main_commit.clone()); + for j in 0..machine.num_pv_elts() { + let element = builder.get(&proof.public_values, j); + challenger.observe(builder, element); + } + // verify proof. + StarkVerifier::::verify_shard(builder, &vk, pcs, machine, &mut challenger, proof); + + // Get the public inputs from the proof. + let public_values_elements = (0..RECURSIVE_PROOF_NUM_PV_ELTS) + .map(|i| builder.get(&proof.public_values, i)) + .collect::>>(); + let public_values: &RecursionPublicValues> = + public_values_elements.as_slice().borrow(); + + // Assert that the proof is complete. + // + // *Remark*: here we are assuming on that the program we are verifying indludes the check + // of completeness conditions are satisfied if the flag is set to one, so we are only + // checking the `is_complete` flag in this program. + builder.assert_felt_eq(public_values.is_complete, C::F::one()); + + // If the proof is a compress proof, assert that the vk is the same as the compress vk from + // the public values. + if is_compress { + let vk_digest = hash_vkey(builder, &vk); + for (i, reduce_digest_elem) in public_values.compress_vk_digest.iter().enumerate() { + let vk_digest_elem = builder.get(&vk_digest, i); + builder.assert_felt_eq(vk_digest_elem, *reduce_digest_elem); + } + } + + // Commit to the public values, broadcasting the same ones. + for value in public_values_elements { + builder.commit_public_value(value); + } + } +} diff --git a/recursion/program/src/machine/utils.rs b/recursion/program/src/machine/utils.rs new file mode 100644 index 0000000000..61500a8d3a --- /dev/null +++ b/recursion/program/src/machine/utils.rs @@ -0,0 +1,117 @@ +use itertools::Itertools; +use p3_commit::TwoAdicMultiplicativeCoset; +use p3_field::AbstractField; + +use sp1_core::{ + air::MachineAir, + stark::{Com, StarkGenericConfig, StarkMachine, StarkVerifyingKey}, +}; +use sp1_recursion_compiler::ir::{Builder, Config, Felt, Var}; +use sp1_recursion_core::{air::RecursionPublicValues, runtime::DIGEST_SIZE}; + +use crate::{ + challenger::DuplexChallengerVariable, + fri::TwoAdicMultiplicativeCosetVariable, + types::VerifyingKeyVariable, + utils::{assert_challenger_eq_pv, get_preprocessed_data}, +}; + +/// Assertions on the public values describing a complete recursive proof state. +pub(crate) fn assert_complete( + builder: &mut Builder, + public_values: &RecursionPublicValues>, + end_reconstruct_challenger: &DuplexChallengerVariable, +) { + let RecursionPublicValues { + deferred_proofs_digest, + next_pc, + start_shard, + cumulative_sum, + start_reconstruct_deferred_digest, + end_reconstruct_deferred_digest, + leaf_challenger, + .. + } = public_values; + + // Assert that `end_pc` is equal to zero (so program execution has completed) + builder.assert_felt_eq(*next_pc, C::F::zero()); + + // Assert that the start shard is equal to 1. + builder.assert_felt_eq(*start_shard, C::F::one()); + + // The challenger has been fully verified. + + // The start_reconstruct_challenger should be the same as an empty challenger observing the + // verifier key and the start pc. This was already verified when verifying the leaf proofs so + // there is no need to assert it here. + + // Assert that the end reconstruct challenger is equal to the leaf challenger. + assert_challenger_eq_pv(builder, end_reconstruct_challenger, *leaf_challenger); + + // The deferred digest has been fully reconstructed. + + // The start reconstruct digest should be zero. + for start_digest_word in start_reconstruct_deferred_digest { + builder.assert_felt_eq(*start_digest_word, C::F::zero()); + } + + // The end reconstruct digest should be equal to the deferred proofs digest. + for (end_digest_word, deferred_digest_word) in end_reconstruct_deferred_digest + .iter() + .zip_eq(deferred_proofs_digest.iter()) + { + builder.assert_felt_eq(*end_digest_word, *deferred_digest_word); + } + + // Assert that the cumulative sum is zero. + for b in cumulative_sum.iter() { + builder.assert_felt_eq(*b, C::F::zero()); + } +} + +pub(crate) fn proof_data_from_vk( + builder: &mut Builder, + vk: &StarkVerifyingKey, + machine: &StarkMachine, +) -> VerifyingKeyVariable +where + SC: StarkGenericConfig< + Val = C::F, + Challenge = C::EF, + Domain = TwoAdicMultiplicativeCoset, + >, + A: MachineAir, + Com: Into<[SC::Val; DIGEST_SIZE]>, +{ + let mut commitment = builder.dyn_array(DIGEST_SIZE); + for (i, value) in vk.commit.clone().into().iter().enumerate() { + builder.set(&mut commitment, i, *value); + } + let pc_start: Felt<_> = builder.eval(vk.pc_start); + + let (prep_sorted_indices_val, prep_domains_val) = get_preprocessed_data(machine, vk); + + let mut prep_sorted_indices = builder.dyn_array::>(prep_sorted_indices_val.len()); + let mut prep_domains = + builder.dyn_array::>(prep_domains_val.len()); + + for (i, value) in prep_sorted_indices_val.iter().enumerate() { + builder.set( + &mut prep_sorted_indices, + i, + C::N::from_canonical_usize(*value), + ); + } + + for (i, value) in prep_domains_val.iter().enumerate() { + let domain: TwoAdicMultiplicativeCosetVariable<_> = builder.constant(*value); + builder.set(&mut prep_domains, i, domain); + } + + VerifyingKeyVariable { + commitment, + pc_start, + preprocessed_sorted_idxs: prep_sorted_indices, + prep_domains, + } +} diff --git a/recursion/program/src/reduce.rs b/recursion/program/src/reduce.rs deleted file mode 100644 index 474006197c..0000000000 --- a/recursion/program/src/reduce.rs +++ /dev/null @@ -1,700 +0,0 @@ -//! ReduceProgram defines a recursive program that can reduce a set of proofs into a single proof. -//! -//! Specifically, this program takes in an ordered list of proofs where each proof can be either an -//! SP1 Core proof or a recursive VM proof of itself. Each proof is verified and then checked to -//! ensure that each transition is valid. Finally, the overall start and end values are committed to. -//! -//! Because SP1 uses a global challenger system, `verify_start_challenger` is witnessed and used to -//! verify each core proof. As each core proof is verified, its commitment and public values are -//! observed into `reconstruct_challenger`. After recursively reducing down to one proof, -//! `reconstruct_challenger` must equal `verify_start_challenger`. -//! -//! "Deferred proofs" can also be passed in and verified. These are fully reduced proofs that were -//! committed to within the core VM. These proofs can then be verified here and then reconstructed -//! into a single digest which is checked against what was committed. Note that it is possible for -//! reduce to be called with only deferred proofs, and not any core/recursive proofs. In this case, -//! the start and end pc/shard values should be equal to each other. -//! -//! Because the program can verify ranges of a full SP1 proof, the program exposes `is_complete` -//! which is only 1 if the program has fully verified the execution of the program, including all -//! deferred proofs. - -#![allow(clippy::needless_range_loop)] - -use p3_baby_bear::BabyBear; -use p3_challenger::DuplexChallenger; -use p3_commit::TwoAdicMultiplicativeCoset; -use p3_field::AbstractField; -use sp1_core::air::{PublicValues, SP1_PROOF_NUM_PV_ELTS, WORD_SIZE}; -use sp1_core::air::{Word, POSEIDON_NUM_WORDS, PV_DIGEST_NUM_WORDS}; -use sp1_core::stark::PROOF_MAX_NUM_PVS; -use sp1_core::stark::{RiscvAir, ShardProof, StarkGenericConfig, StarkVerifyingKey}; -use sp1_core::utils::baby_bear_poseidon2::{compressed_fri_config, default_fri_config}; -use sp1_core::utils::sp1_fri_config; -use sp1_core::utils::{BabyBearPoseidon2, InnerDigest}; -use sp1_recursion_compiler::asm::{AsmBuilder, AsmConfig}; -use sp1_recursion_compiler::ir::{Array, Builder, Ext, ExtConst, Felt, Var}; -use sp1_recursion_core::air::RecursionPublicValues; -use sp1_recursion_core::cpu::Instruction; -use sp1_recursion_core::runtime::{RecursionProgram, DIGEST_SIZE}; -use sp1_recursion_core::stark::{RecursionAirSkinnyDeg7, RecursionAirWideDeg3}; - -use crate::challenger::{CanObserveVariable, DuplexChallengerVariable}; -use crate::fri::types::DigestVariable; -use crate::fri::TwoAdicFriPcsVariable; -use crate::fri::TwoAdicMultiplicativeCosetVariable; -use crate::hints::Hintable; -use crate::stark::StarkVerifier; -use crate::types::{QuotientData, QuotientDataValues, VerifyingKeyVariable}; -use crate::types::{Sha256DigestVariable, ShardProofVariable}; -use crate::utils::{ - assert_challenger_eq_pv, assign_challenger_from_pv, clone_array, commit_challenger, - const_fri_config, felt2var, hash_vkey, var2felt, -}; - -type SC = BabyBearPoseidon2; -type F = ::Val; -type EF = ::Challenge; -type C = AsmConfig; -type Val = BabyBear; - -#[derive(Debug, Clone, Copy)] -pub struct ReduceProgram; - -impl ReduceProgram { - /// The program that can reduce a set of proofs into a single proof. - pub fn build() -> RecursionProgram { - let mut reduce_program = Self::define(false); - reduce_program.instructions[0] = Instruction::dummy(); - reduce_program - } - - /// The program used for setting up the state of memory for the prover. - pub fn setup() -> RecursionProgram { - Self::define(true) - } - - /// A definition for the program. - pub fn define(setup: bool) -> RecursionProgram { - // Initialize the sp1 and recursion maachines. - let core_machine = RiscvAir::machine(BabyBearPoseidon2::default()); - let reduce_machine = RecursionAirWideDeg3::machine(BabyBearPoseidon2::default()); - let compress_machine = RecursionAirSkinnyDeg7::machine(BabyBearPoseidon2::compressed()); - - // Initialize the builder. - let mut builder = AsmBuilder::::default(); - - // Initialize the sp1 and recursion configs as constants.. - let sp1_config = const_fri_config(&mut builder, sp1_fri_config()); - let reduce_config = const_fri_config(&mut builder, default_fri_config()); - let compress_config = const_fri_config(&mut builder, compressed_fri_config()); - let sp1_pcs = TwoAdicFriPcsVariable { config: sp1_config }; - let reduce_pcs = TwoAdicFriPcsVariable { - config: reduce_config, - }; - let compress_pcs = TwoAdicFriPcsVariable { - config: compress_config, - }; - - // Allocate empty space on the stack for the inputs. - // - // In the case where setup is not true, the values on the stack will all be witnessed - // with the appropriate values using the hinting API. - let is_recursive_flags: Array<_, Var<_>> = builder.uninit(); - let chip_quotient_data: Array<_, Array<_, QuotientData<_>>> = builder.uninit(); - let sorted_indices: Array<_, Array<_, Var<_>>> = builder.uninit(); - let verify_start_challenger: DuplexChallengerVariable<_> = builder.uninit(); - let reconstruct_challenger: DuplexChallengerVariable<_> = builder.uninit(); - let prep_sorted_indices: Array<_, Var<_>> = builder.uninit(); - let prep_domains: Array<_, TwoAdicMultiplicativeCosetVariable<_>> = builder.uninit(); - let reduce_prep_sorted_indices: Array<_, Var<_>> = builder.uninit(); - let reduce_prep_domains: Array<_, TwoAdicMultiplicativeCosetVariable<_>> = builder.uninit(); - let compress_prep_sorted_indices: Array<_, Var<_>> = builder.uninit(); - let compress_prep_domains: Array<_, TwoAdicMultiplicativeCosetVariable<_>> = - builder.uninit(); - let sp1_vk: VerifyingKeyVariable<_> = builder.uninit(); - let reduce_vk: VerifyingKeyVariable<_> = builder.uninit(); - let compress_vk: VerifyingKeyVariable<_> = builder.uninit(); - let initial_committed_values_digest: Sha256DigestVariable<_> = builder.uninit(); - let initial_deferred_proofs_digest: DigestVariable<_> = builder.uninit(); - let initial_start_pc: Felt<_> = builder.uninit(); - let initial_exit_code: Felt<_> = builder.uninit(); - let initial_start_shard: Felt<_> = builder.uninit(); - let mut reconstruct_deferred_digest: DigestVariable<_> = builder.uninit(); - let proofs: Array<_, ShardProofVariable<_>> = builder.uninit(); - let deferred_chip_quotient_data: Array<_, Array<_, QuotientData<_>>> = builder.uninit(); - let deferred_sorted_indices: Array<_, Array<_, Var<_>>> = builder.uninit(); - let num_deferred_proofs: Var<_> = builder.uninit(); - let deferred_proofs: Array<_, ShardProofVariable<_>> = builder.uninit(); - let is_complete: Var<_> = builder.uninit(); - let is_compressed: Var<_> = builder.uninit(); - - // Setup the memory for the prover. - // - // If the program is being setup, we need to witness the inputs using the hinting API - // and setup the correct state of memory. - if setup { - Vec::::witness(&is_recursive_flags, &mut builder); - Vec::>::witness(&chip_quotient_data, &mut builder); - Vec::>::witness(&sorted_indices, &mut builder); - DuplexChallenger::witness(&verify_start_challenger, &mut builder); - DuplexChallenger::witness(&reconstruct_challenger, &mut builder); - Vec::::witness(&prep_sorted_indices, &mut builder); - Vec::>::witness(&prep_domains, &mut builder); - Vec::::witness(&reduce_prep_sorted_indices, &mut builder); - Vec::>::witness( - &reduce_prep_domains, - &mut builder, - ); - Vec::::witness(&compress_prep_sorted_indices, &mut builder); - Vec::>::witness( - &compress_prep_domains, - &mut builder, - ); - StarkVerifyingKey::::witness(&sp1_vk, &mut builder); - StarkVerifyingKey::::witness(&reduce_vk, &mut builder); - StarkVerifyingKey::::witness(&compress_vk, &mut builder); - <[Word; PV_DIGEST_NUM_WORDS] as Hintable>::witness( - &initial_committed_values_digest, - &mut builder, - ); - InnerDigest::witness(&initial_deferred_proofs_digest, &mut builder); - BabyBear::witness(&initial_start_pc, &mut builder); - BabyBear::witness(&initial_exit_code, &mut builder); - BabyBear::witness(&initial_start_shard, &mut builder); - InnerDigest::witness(&reconstruct_deferred_digest, &mut builder); - - let num_proofs = is_recursive_flags.len(); - let mut proofs_target = builder.dyn_array(num_proofs); - builder.range(0, num_proofs).for_each(|i, builder| { - let proof = ShardProof::::read(builder); - builder.set(&mut proofs_target, i, proof); - }); - builder.assign(proofs.clone(), proofs_target); - - Vec::>::witness(&deferred_chip_quotient_data, &mut builder); - Vec::>::witness(&deferred_sorted_indices, &mut builder); - Vec::>::witness(&deferred_proofs, &mut builder); - let num_deferred_proofs_var = deferred_proofs.len(); - builder.assign(num_deferred_proofs, num_deferred_proofs_var); - usize::witness(&is_complete, &mut builder); - usize::witness(&is_compressed, &mut builder); - - return builder.compile_program(); - } - - let num_proofs = is_recursive_flags.len(); - let zero: Var<_> = builder.constant(F::zero()); - let zero_felt: Felt<_> = builder.constant(F::zero()); - let one: Var<_> = builder.constant(F::one()); - let one_felt: Felt<_> = builder.constant(F::one()); - - // Setup the recursive challenger. - builder.cycle_tracker("stage-b-setup-recursion-challenger"); - let mut recursion_challenger = DuplexChallengerVariable::new(&mut builder); - for j in 0..DIGEST_SIZE { - let element = builder.get(&reduce_vk.commitment, j); - recursion_challenger.observe(&mut builder, element); - } - recursion_challenger.observe(&mut builder, reduce_vk.pc_start); - builder.cycle_tracker("stage-b-setup-recursion-challenger"); - - // Hash vkey + pc_start + prep_domains into a single digest. - let sp1_vk_digest = hash_vkey(&mut builder, &sp1_vk, &prep_domains, &prep_sorted_indices); - let recursion_vk_digest = hash_vkey( - &mut builder, - &reduce_vk, - &reduce_prep_domains, - &reduce_prep_sorted_indices, - ); - - // Global variables that will be commmitted to at the end. - let global_committed_values_digest: Sha256DigestVariable<_> = - initial_committed_values_digest; - let global_deferred_proofs_digest: DigestVariable<_> = initial_deferred_proofs_digest; - let global_start_pc: Felt<_> = initial_start_pc; - let global_next_pc: Felt<_> = builder.uninit(); - let global_exit_code: Felt<_> = initial_exit_code; - let global_start_shard: Felt<_> = initial_start_shard; - let global_next_shard: Felt<_> = builder.uninit(); - let global_cumulative_sum: Ext<_, _> = builder.eval(EF::zero().cons()); - let start_reconstruct_challenger = reconstruct_challenger.copy(&mut builder); - let start_reconstruct_deferred_digest = - clone_array(&mut builder, &reconstruct_deferred_digest); - - // Previous proof's values. - let prev_next_pc: Felt<_> = builder.uninit(); - let prev_next_shard: Felt<_> = builder.uninit(); - - // For each proof: - // 1) If it's the first proof of this batch, ensure that the start values are correct. - // 2) If it's not the first proof, ensure that the global values are the same and the - // transitions are valid. - // 3) If it's the last proof of this batch, set the global end variables. - // 4) If it's not the last proof, update the previous values. - let constrain_shard_transitions = - |proof_index: Var<_>, - builder: &mut Builder, - committed_value_digest_words: &[Word>; PV_DIGEST_NUM_WORDS], - start_pc: Felt<_>, - next_pc: Felt<_>, - start_shard: Felt<_>, - next_shard: Felt<_>, - exit_code: Felt<_>| { - let committed_value_digest = - Sha256DigestVariable::from_words(builder, committed_value_digest_words); - builder.if_eq(proof_index, zero).then_or_else( - // First proof: ensure that witnessed start values are correct. - |builder| { - for i in 0..(PV_DIGEST_NUM_WORDS * WORD_SIZE) { - let element = builder.get(&global_committed_values_digest.bytes, i); - let proof_element = builder.get(&committed_value_digest.bytes, i); - builder.assert_felt_eq(element, proof_element); - } - builder.assert_felt_eq(global_start_pc, start_pc); - builder.assert_felt_eq(global_start_shard, start_shard); - builder.assert_felt_eq(global_exit_code, exit_code); - }, - // Non-first proofs: verify global values are same and transitions are valid. - |builder| { - // Assert that committed_values_digest and exit_code are the same - for j in 0..(PV_DIGEST_NUM_WORDS * WORD_SIZE) { - let global_element = - builder.get(&global_committed_values_digest.bytes, j); - let element = builder.get(&committed_value_digest.bytes, j); - builder.assert_felt_eq(global_element, element); - } - builder.assert_felt_eq(global_exit_code, exit_code); - - // Shard should be previous next_shard. - builder.assert_felt_eq(start_shard, prev_next_shard); - // Start pc should be equal to next_pc declared in previous proof. - builder.assert_felt_eq(start_pc, prev_next_pc); - }, - ); - builder.if_eq(proof_index, num_proofs - one).then_or_else( - // If it's the last proof, set global end variables. - |builder| { - builder.assign(global_next_shard, next_shard); - builder.assign(global_next_pc, next_pc); - }, - // If it's not the last proof, update previous values. - |builder| { - builder.assign(prev_next_pc, next_pc); - builder.assign(prev_next_shard, next_shard); - }, - ); - }; - - // Verify sp1 and recursive proofs. - builder.range(0, num_proofs).for_each(|i, builder| { - let proof = builder.get(&proofs, i); - let sorted_indices = builder.get(&sorted_indices, i); - let chip_quotient_data = builder.get(&chip_quotient_data, i); - let is_recursive = builder.get(&is_recursive_flags, i); - - builder.if_eq(is_recursive, zero).then_or_else( - // Handle the case where the proof is a sp1 proof. - |builder| { - // Clone the variable pointer to reconstruct_challenger. - let reconstruct_challenger = reconstruct_challenger.clone(); - // Extract public values. - let mut pv_elements = Vec::new(); - for i in 0..PROOF_MAX_NUM_PVS { - let element = builder.get(&proof.public_values, i); - pv_elements.push(element); - } - let pv = PublicValues::>, Felt<_>>::from_vec(pv_elements); - - // Verify shard transitions. - let next_shard: Felt<_> = builder.uninit(); - let next_pc_var = felt2var(builder, pv.next_pc); - builder.if_eq(next_pc_var, zero).then_or_else( - // If next_pc is 0, then next_shard should be 0. - |builder| { - builder.assign(next_shard, zero_felt); - }, - // Otherwise, next_shard should be shard + 1. - |builder| { - let shard_plus_one: Felt<_> = builder.eval(pv.shard + one_felt); - builder.assign(next_shard, shard_plus_one); - }, - ); - constrain_shard_transitions( - i, - builder, - &pv.committed_value_digest, - pv.start_pc, - pv.next_pc, - pv.shard, - next_shard, - pv.exit_code, - ); - - // Need to convert the shard as a felt to a variable, since `if_eq` only handles - // variables. - let shard_f = pv.shard; - let shard = felt2var(builder, shard_f); - - // Handle the case where the shard is the first shard. - builder.if_eq(shard, one).then(|builder| { - // This should be the first proof as well - builder.assert_var_eq(i, zero); - - // Start pc should be sp1_vk.pc_start - builder.assert_felt_eq(pv.start_pc, sp1_vk.pc_start); - - // Clone the variable pointer to verify_start_challenger. - let mut reconstruct_challenger = reconstruct_challenger.clone(); - // Initialize the reconstruct challenger from empty challenger. - reconstruct_challenger.reset(builder); - reconstruct_challenger.observe(builder, sp1_vk.commitment.clone()); - reconstruct_challenger.observe(builder, sp1_vk.pc_start); - - // Make sure the start reconstruct challenger is correct, since we will - // commit to it in public values. - start_reconstruct_challenger.assert_eq(builder, &reconstruct_challenger); - - // Make sure start reconstruct deferred digest is fully zero. - for j in 0..POSEIDON_NUM_WORDS { - let element = builder.get(&start_reconstruct_deferred_digest, j); - builder.assert_felt_eq(element, zero_felt); - } - }); - - // Observe current proof commit and public values into reconstruct challenger. - for j in 0..DIGEST_SIZE { - let element = builder.get(&proof.commitment.main_commit, j); - reconstruct_challenger.clone().observe(builder, element); - } - for j in 0..SP1_PROOF_NUM_PV_ELTS { - let element = builder.get(&proof.public_values, j); - reconstruct_challenger.clone().observe(builder, element); - } - - // Accumulate lookup bus. - let num_chips = proof.opened_values.chips.len(); - builder.range(0, num_chips).for_each(|j, builder| { - let chip = builder.get(&proof.opened_values.chips, j); - let new_sum: Ext<_, _> = - builder.eval(global_cumulative_sum + chip.cumulative_sum); - builder.assign(global_cumulative_sum, new_sum); - }); - - // Verify proof with copy of witnessed challenger. - let mut current_challenger = verify_start_challenger.copy(builder); - - // Verify the shard. - StarkVerifier::::verify_shard( - builder, - &sp1_vk.clone(), - &sp1_pcs, - &core_machine, - &mut current_challenger, - &proof, - chip_quotient_data.clone(), - sorted_indices.clone(), - prep_sorted_indices.clone(), - prep_domains.clone(), - ); - }, - // Handle the case where the proof is a recursive proof. - |builder| { - let mut reconstruct_challenger = reconstruct_challenger.clone(); - let mut pv_elements = Vec::new(); - for i in 0..PROOF_MAX_NUM_PVS { - let element = builder.get(&proof.public_values, i); - pv_elements.push(element); - } - let pv = RecursionPublicValues::>::from_vec(pv_elements); - - // Verify shard transitions. - constrain_shard_transitions( - i, - builder, - &pv.committed_value_digest, - pv.start_pc, - pv.next_pc, - pv.start_shard, - pv.next_shard, - pv.exit_code, - ); - - // Assert that the current reconstruct_challenger is the same as the proof's - // start_reconstruct_challenger, then fast-forward to end_reconstruct_challenger. - assert_challenger_eq_pv( - builder, - &reconstruct_challenger, - pv.start_reconstruct_challenger, - ); - assign_challenger_from_pv( - builder, - &mut reconstruct_challenger, - pv.end_reconstruct_challenger, - ); - - // Assert that the current deferred_proof_digest is the same as the proof's - // start_reconstruct_deferred_digest, then fast-forward to end digest. - for j in 0..DIGEST_SIZE { - let element = builder.get(&reconstruct_deferred_digest, j); - builder.assert_felt_eq(element, pv.start_reconstruct_deferred_digest[j]); - } - for j in 0..DIGEST_SIZE { - builder.set( - &mut reconstruct_deferred_digest, - j, - pv.end_reconstruct_deferred_digest[j], - ); - } - - // Assert that sp1_vk, recursion_vk, and verify_start_challenger are the same. - for j in 0..DIGEST_SIZE { - let element = builder.get(&sp1_vk_digest, j); - builder.assert_felt_eq(element, pv.sp1_vk_digest[j]); - } - for j in 0..DIGEST_SIZE { - let element = builder.get(&recursion_vk_digest, j); - builder.assert_felt_eq(element, pv.recursion_vk_digest[j]); - } - assert_challenger_eq_pv( - builder, - &verify_start_challenger, - pv.verify_start_challenger, - ); - - // Accumulate lookup bus. - let pv_cumulative_sum = builder.ext_from_base_slice(&pv.cumulative_sum); - let new_sum: Ext<_, _> = - builder.eval(global_cumulative_sum + pv_cumulative_sum); - builder.assign(global_cumulative_sum, new_sum); - - // Setup the recursive challenger to use for verifying. - let mut current_challenger = recursion_challenger.copy(builder); - for j in 0..DIGEST_SIZE { - let element = builder.get(&proof.commitment.main_commit, j); - current_challenger.observe(builder, element); - } - builder.range(0, PROOF_MAX_NUM_PVS).for_each(|j, builder| { - let element = builder.get(&proof.public_values, j); - current_challenger.observe(builder, element); - }); - - builder.if_eq(is_compressed, BabyBear::one()).then_or_else( - |builder| { - StarkVerifier::::verify_shard( - builder, - &compress_vk, - &compress_pcs, - &compress_machine, - &mut current_challenger.clone(), - &proof, - chip_quotient_data.clone(), - sorted_indices.clone(), - reduce_prep_sorted_indices.clone(), - reduce_prep_domains.clone(), - ); - }, - |builder| { - StarkVerifier::::verify_shard( - builder, - &reduce_vk, - &reduce_pcs, - &reduce_machine, - &mut current_challenger.clone(), - &proof, - chip_quotient_data.clone(), - sorted_indices.clone(), - reduce_prep_sorted_indices.clone(), - reduce_prep_domains.clone(), - ); - }, - ) - }, - ); - }); - - // If num_proofs is 0, set end values to same as start values. - builder.if_eq(num_proofs, zero).then(|builder| { - builder.assign(global_next_shard, global_start_shard); - builder.assign(global_next_pc, global_start_pc); - }); - - // Verify deferred proofs and acculumate to deferred proofs digest. - builder - .range(0, num_deferred_proofs) - .for_each(|i, builder| { - let proof = builder.get(&deferred_proofs, i); - let sorted_indices = builder.get(&deferred_sorted_indices, i); - let chip_quotient_data = builder.get(&deferred_chip_quotient_data, i); - let mut challenger = recursion_challenger.copy(builder); - for j in 0..DIGEST_SIZE { - let element = builder.get(&proof.commitment.main_commit, j); - challenger.observe(builder, element); - } - builder.range(0, PROOF_MAX_NUM_PVS).for_each(|j, builder| { - let element = builder.get(&proof.public_values, j); - challenger.observe(builder, element); - }); - - // Validate proof public values. - // 1) Ensure that the proof is complete. - let mut pv_elements = Vec::new(); - for i in 0..PROOF_MAX_NUM_PVS { - let element = builder.get(&proof.public_values, i); - pv_elements.push(element); - } - let pv = RecursionPublicValues::>::from_vec(pv_elements); - builder.assert_felt_eq(pv.is_complete, one_felt); - // 2) Ensure recursion vkey is correct - for j in 0..DIGEST_SIZE { - let element = builder.get(&recursion_vk_digest, j); - builder.assert_felt_eq(element, pv.recursion_vk_digest[j]); - } - - // Verify the shard. - StarkVerifier::::verify_shard( - builder, - &reduce_vk.clone(), - &reduce_pcs, - &reduce_machine, - &mut challenger, - &proof, - chip_quotient_data.clone(), - sorted_indices.clone(), - reduce_prep_sorted_indices.clone(), - reduce_prep_domains.clone(), - ); - - // Update deferred proof digest - // poseidon2( current_digest[..8] || pv.sp1_vk_digest[..8] || pv.committed_value_digest[..32] ) - let mut poseidon_inputs = builder.array(48); - builder.range(0, 8).for_each(|j, builder| { - let element = builder.get(&reconstruct_deferred_digest, j); - builder.set(&mut poseidon_inputs, j, element); - }); - for j in 0..DIGEST_SIZE { - let input_index: Var<_> = builder.constant(F::from_canonical_usize(j + 8)); - builder.set(&mut poseidon_inputs, input_index, pv.sp1_vk_digest[j]); - } - for j in 0..PV_DIGEST_NUM_WORDS { - for k in 0..WORD_SIZE { - let input_index: Var<_> = - builder.eval(F::from_canonical_usize(j * WORD_SIZE + k + 16)); - let element = pv.committed_value_digest[j][k]; - builder.set(&mut poseidon_inputs, input_index, element); - } - } - let new_digest = builder.poseidon2_hash(&poseidon_inputs); - for j in 0..DIGEST_SIZE { - let element = builder.get(&new_digest, j); - builder.set(&mut reconstruct_deferred_digest, j, element); - } - }); - - // If witnessed as complete, then verify all of the final state is correct. - builder.if_eq(is_complete, one).then_or_else( - |builder| { - // 1) Proof begins at shard == 1. - let global_start_shard_var = felt2var(builder, global_start_shard); - builder.assert_var_eq(global_start_shard_var, one); - - // 2) Proof begins at pc == sp1_vk.pc_start. - builder.assert_felt_eq(global_start_pc, sp1_vk.pc_start); - - // 3) Execution has halted (next_pc == 0 && next_shard == 0). - let global_next_pc_var = felt2var(builder, global_next_pc); - builder.assert_var_eq(global_next_pc_var, zero); - let global_next_shard_var = felt2var(builder, global_next_shard); - builder.assert_var_eq(global_next_shard_var, zero); - - // 4) reconstruct_challenger has been fully reconstructed. - // a) start_reconstruct_challenger == challenger after observing vk and pc_start. - let mut expected_challenger = DuplexChallengerVariable::new(builder); - expected_challenger.observe(builder, sp1_vk.commitment.clone()); - expected_challenger.observe(builder, sp1_vk.pc_start); - start_reconstruct_challenger.assert_eq(builder, &expected_challenger); - // b) end_reconstruct_challenger == verify_start_challenger. - reconstruct_challenger.assert_eq(builder, &verify_start_challenger); - - // 5) reconstruct_deferred_digest has been fully reconstructed. - // a) start_reconstruct_deferred_digest == 0. - for j in 0..DIGEST_SIZE { - let element = builder.get(&start_reconstruct_deferred_digest, j); - builder.assert_felt_eq(element, zero_felt); - } - // b) end_reconstruct_deferred_digest == deferred_proofs_digest. - for j in 0..DIGEST_SIZE { - let element = builder.get(&reconstruct_deferred_digest, j); - let global_element = builder.get(&global_deferred_proofs_digest, j); - builder.assert_felt_eq(element, global_element); - } - - // 6) Verify that the cumulative sum is zero. - let zero_ext: Ext<_, _> = builder.eval(EF::zero().cons()); - builder.assert_ext_eq(global_cumulative_sum, zero_ext); - }, - // Ensure is_complete is boolean. - |builder| { - builder.assert_var_eq(is_complete, zero); - }, - ); - - // Public values: - // ( - // committed_values_digest, - // deferred_proofs_digest, - // start_pc, - // next_pc, - // exit_code, - // start_shard, - // end_shard, - // start_reconstruct_challenger, - // end_reconstruct_challenger, - // start_reconstruct_deferred_digest, - // end_reconstruct_deferred_digest, - // sp1_vk_digest, - // recursion_vk_digest, - // verify_start_challenger, - // cumulative_sum, - // is_complete, - // ) - for j in 0..(PV_DIGEST_NUM_WORDS * WORD_SIZE) { - let element = builder.get(&global_committed_values_digest.bytes, j); - builder.commit_public_value(element); - } - for j in 0..POSEIDON_NUM_WORDS { - let element = builder.get(&global_deferred_proofs_digest, j); - builder.commit_public_value(element); - } - builder.commit_public_value(global_start_pc); - builder.commit_public_value(global_next_pc); - builder.commit_public_value(global_exit_code); - builder.commit_public_value(global_start_shard); - builder.commit_public_value(global_next_shard); - commit_challenger(&mut builder, &start_reconstruct_challenger); - commit_challenger(&mut builder, &reconstruct_challenger); - builder.range(0, POSEIDON_NUM_WORDS).for_each(|j, builder| { - let element = builder.get(&start_reconstruct_deferred_digest, j); - builder.commit_public_value(element); - }); - builder.range(0, POSEIDON_NUM_WORDS).for_each(|j, builder| { - let element = builder.get(&reconstruct_deferred_digest, j); - builder.commit_public_value(element); - }); - builder.range(0, DIGEST_SIZE).for_each(|j, builder| { - let element = builder.get(&sp1_vk_digest, j); - builder.commit_public_value(element); - }); - builder.range(0, DIGEST_SIZE).for_each(|j, builder| { - let element = builder.get(&recursion_vk_digest, j); - builder.commit_public_value(element); - }); - commit_challenger(&mut builder, &verify_start_challenger); - let cumulative_sum_felts = builder.ext2felt(global_cumulative_sum); - builder.commit_public_values(&cumulative_sum_felts); - let is_complete_felt = var2felt(&mut builder, is_complete); - builder.commit_public_value(is_complete_felt); - - builder.compile_program() - } -} diff --git a/recursion/program/src/stark.rs b/recursion/program/src/stark.rs index f92ac770b2..86fcd11762 100644 --- a/recursion/program/src/stark.rs +++ b/recursion/program/src/stark.rs @@ -5,12 +5,16 @@ use p3_field::TwoAdicField; use sp1_core::air::MachineAir; use sp1_core::stark::Com; use sp1_core::stark::GenericVerifierConstraintFolder; +use sp1_core::stark::ShardProof; use sp1_core::stark::StarkGenericConfig; use sp1_core::stark::StarkMachine; +use sp1_core::stark::StarkVerifyingKey; use sp1_recursion_compiler::ir::Array; use sp1_recursion_compiler::ir::Ext; +use sp1_recursion_compiler::ir::ExtConst; use sp1_recursion_compiler::ir::SymbolicExt; +use sp1_recursion_compiler::ir::SymbolicVar; use sp1_recursion_compiler::ir::Var; use sp1_recursion_compiler::ir::{Builder, Config, Usize}; use sp1_recursion_compiler::prelude::Felt; @@ -32,11 +36,106 @@ use crate::types::QuotientData; pub const EMPTY: usize = 0x_1111_1111; +pub trait StarkRecursiveVerifier { + fn verify_shard( + &self, + builder: &mut Builder, + vk: &VerifyingKeyVariable, + pcs: &TwoAdicFriPcsVariable, + challenger: &mut DuplexChallengerVariable, + proof: &ShardProofVariable, + is_complete: impl Into>, + ); + + fn verify_shards( + &self, + builder: &mut Builder, + vk: &VerifyingKeyVariable, + pcs: &TwoAdicFriPcsVariable, + challenger: &mut DuplexChallengerVariable, + proofs: &Array>, + is_complete: impl Into> + Clone, + ) { + // Assert that the number of shards is not zero. + builder.assert_usize_ne(proofs.len(), 0); + + // Verify each shard. + builder.range(0, proofs.len()).for_each(|i, builder| { + let proof = builder.get(proofs, i); + self.verify_shard(builder, vk, pcs, challenger, &proof, is_complete.clone()); + }); + } +} + #[derive(Debug, Clone, Copy)] pub struct StarkVerifier { _phantom: std::marker::PhantomData<(C, SC)>, } +pub struct ShardProofHint<'a, SC: StarkGenericConfig, A> { + pub machine: &'a StarkMachine, + pub proof: &'a ShardProof, +} + +impl<'a, SC: StarkGenericConfig, A: MachineAir> ShardProofHint<'a, SC, A> { + pub fn new(machine: &'a StarkMachine, proof: &'a ShardProof) -> Self { + Self { machine, proof } + } +} + +pub struct VerifyingKeyHint<'a, SC: StarkGenericConfig, A> { + pub machine: &'a StarkMachine, + pub vk: &'a StarkVerifyingKey, +} + +impl<'a, SC: StarkGenericConfig, A: MachineAir> VerifyingKeyHint<'a, SC, A> { + pub fn new(machine: &'a StarkMachine, vk: &'a StarkVerifyingKey) -> Self { + Self { machine, vk } + } +} + +impl StarkRecursiveVerifier for StarkMachine +where + C::F: TwoAdicField, + SC: StarkGenericConfig< + Val = C::F, + Challenge = C::EF, + Domain = TwoAdicMultiplicativeCoset, + >, + A: MachineAir + for<'a> Air>, + C::F: TwoAdicField, + C::EF: TwoAdicField, + Com: Into<[SC::Val; DIGEST_SIZE]>, +{ + fn verify_shard( + &self, + builder: &mut Builder, + vk: &VerifyingKeyVariable, + pcs: &TwoAdicFriPcsVariable, + challenger: &mut DuplexChallengerVariable, + proof: &ShardProofVariable, + is_complete: impl Into::N>>, + ) { + // Verify the shard proof. + StarkVerifier::::verify_shard(builder, vk, pcs, self, challenger, proof); + + // Verify that the cumulative sum of the chip is zero if the shard is complete. + let cumulative_sum: Ext<_, _> = builder.uninit(); + builder + .range(0, proof.opened_values.chips.len()) + .for_each(|i, builder| { + let values = builder.get(&proof.opened_values.chips, i); + builder.assign(cumulative_sum, cumulative_sum + values.cumulative_sum); + }); + + builder + .if_eq(is_complete.into(), C::N::one()) + .then(|builder| { + builder.assert_ext_eq(cumulative_sum, C::EF::zero().cons()); + }); + } +} + pub type RecursiveVerifierConstraintFolder<'a, C> = GenericVerifierConstraintFolder< 'a, ::F, @@ -62,10 +161,6 @@ where machine: &StarkMachine, challenger: &mut DuplexChallengerVariable, proof: &ShardProofVariable, - chip_quotient_data: Array>, - chip_sorted_idxs: Array>, - preprocessed_sorted_idxs: Array>, - prep_domains: Array>, ) where A: MachineAir + for<'a> Air>, C::F: TwoAdicField, @@ -114,7 +209,7 @@ where let num_quotient_mats: Var<_> = builder.eval(C::N::zero()); builder.range(0, num_shard_chips).for_each(|i, builder| { - let num_quotient_chunks = builder.get(&chip_quotient_data, i).quotient_size; + let num_quotient_chunks = builder.get(&proof.quotient_data, i).quotient_size; builder.assign(num_quotient_mats, num_quotient_mats + num_quotient_chunks); }); @@ -127,12 +222,12 @@ where // Iterate through machine.chips filtered for preprocessed chips. for (preprocessed_id, chip_id) in machine.preprocessed_chip_ids().into_iter().enumerate() { // Get index within sorted preprocessed chips. - let preprocessed_sorted_id = builder.get(&preprocessed_sorted_idxs, preprocessed_id); + let preprocessed_sorted_id = builder.get(&vk.preprocessed_sorted_idxs, preprocessed_id); // Get domain from witnessed domains. Array is ordered by machine.chips ordering. - let domain = builder.get(&prep_domains, preprocessed_id); + let domain = builder.get(&vk.prep_domains, preprocessed_id); // Get index within all sorted chips. - let chip_sorted_id = builder.get(&chip_sorted_idxs, chip_id); + let chip_sorted_id = builder.get(&proof.sorted_idxs, chip_id); // Get opening from proof. let opening = builder.get(&opened_values.chips, chip_sorted_id); @@ -159,7 +254,7 @@ where let QuotientData { log_quotient_degree, quotient_size, - } = builder.get(&chip_quotient_data, i); + } = builder.get(&proof.quotient_data, i); let domain = pcs.natural_domain_for_log_degree(builder, Usize::Var(opening.log_degree)); builder.set_value(&mut trace_domains, i, domain.clone()); @@ -253,7 +348,7 @@ where for (i, chip) in machine.chips().iter().enumerate() { let chip_name = chip.name(); tracing::debug!("verifying constraints for chip: {}", chip_name); - let index = builder.get(&chip_sorted_idxs, i); + let index = builder.get(&proof.sorted_idxs, i); if chip.preprocessed_width() > 0 { builder.assert_var_ne(index, C::N::from_canonical_usize(EMPTY)); @@ -271,7 +366,7 @@ where let log_quotient_degree = chip.log_quotient_degree(); let quotient_size = 1 << log_quotient_degree; - let chip_quotient_data = builder.get(&chip_quotient_data, index); + let chip_quotient_data = builder.get(&proof.quotient_data, index); builder.assert_usize_eq( chip_quotient_data.log_quotient_degree, log_quotient_degree, @@ -308,6 +403,7 @@ pub(crate) mod tests { use crate::hints::Hintable; use crate::stark::DuplexChallengerVariable; use crate::stark::Ext; + use crate::stark::ShardProofHint; use crate::types::ShardCommitmentVariable; use p3_challenger::{CanObserve, FieldChallenger}; use p3_field::AbstractField; @@ -318,7 +414,7 @@ pub(crate) mod tests { use sp1_core::utils::InnerChallenge; use sp1_core::utils::InnerVal; use sp1_core::{ - stark::{RiscvAir, ShardProof, StarkGenericConfig}, + stark::{RiscvAir, StarkGenericConfig}, utils::BabyBearPoseidon2, }; use sp1_recursion_compiler::config::InnerConfig; @@ -377,8 +473,9 @@ pub(crate) mod tests { let mut witness_stream = Vec::new(); for proof in proofs { - witness_stream.extend(proof.write()); - let proof = ShardProof::::read(&mut builder); + let proof_hint = ShardProofHint::new(&machine, &proof); + witness_stream.extend(proof_hint.write()); + let proof = ShardProofHint::::read(&mut builder); let ShardCommitmentVariable { main_commit, .. } = proof.commitment; challenger.observe(&mut builder, main_commit); let pv_slice = proof.public_values.slice( diff --git a/recursion/program/src/types.rs b/recursion/program/src/types.rs index c53811a144..db49b10eb5 100644 --- a/recursion/program/src/types.rs +++ b/recursion/program/src/types.rs @@ -17,6 +17,8 @@ pub struct ShardProofVariable { pub opened_values: ShardOpenedValuesVariable, pub opening_proof: TwoAdicPcsProofVariable, pub public_values: Array>, + pub quotient_data: Array>, + pub sorted_idxs: Array>, } #[derive(DslVariable, Clone, Copy)] @@ -36,6 +38,8 @@ pub struct QuotientDataValues { pub struct VerifyingKeyVariable { pub commitment: DigestVariable, pub pc_start: Felt, + pub preprocessed_sorted_idxs: Array>, + pub prep_domains: Array>, } /// Reference: [sp1_core::stark::ShardCommitment] diff --git a/recursion/program/src/utils.rs b/recursion/program/src/utils.rs index 550b9e0e43..92b46c546e 100644 --- a/recursion/program/src/utils.rs +++ b/recursion/program/src/utils.rs @@ -6,7 +6,8 @@ use p3_fri::FriConfig; use p3_merkle_tree::FieldMerkleTreeMmcs; use p3_poseidon2::{Poseidon2, Poseidon2ExternalMatrixGeneral}; use p3_symmetric::{PaddingFreeSponge, TruncatedPermutation}; -use sp1_core::stark::StarkGenericConfig; +use sp1_core::air::MachineAir; +use sp1_core::stark::{Dom, ShardProof, StarkGenericConfig, StarkMachine, StarkVerifyingKey}; use sp1_core::utils::BabyBearPoseidon2; use sp1_recursion_compiler::asm::AsmConfig; use sp1_recursion_compiler::ir::{Array, Builder, Config, Felt, MemVariable, Var}; @@ -16,7 +17,8 @@ use sp1_recursion_core::runtime::{DIGEST_SIZE, PERMUTATION_WIDTH}; use crate::challenger::DuplexChallengerVariable; use crate::fri::types::FriConfigVariable; use crate::fri::TwoAdicMultiplicativeCosetVariable; -use crate::types::VerifyingKeyVariable; +use crate::stark::EMPTY; +use crate::types::{QuotientDataValues, VerifyingKeyVariable}; type SC = BabyBearPoseidon2; type F = ::Val; @@ -35,7 +37,7 @@ type RecursionBuilder = Builder; pub fn const_fri_config( builder: &mut RecursionBuilder, - config: FriConfig, + config: &FriConfig, ) -> FriConfigVariable { let two_addicity = Val::TWO_ADICITY; let mut generators = builder.dyn_array(two_addicity); @@ -165,15 +167,32 @@ pub fn commit_challenger(builder: &mut Builder, var: &DuplexChalle } } +pub fn get_challenger_public_values( + builder: &mut Builder, + var: &DuplexChallengerVariable, +) -> ChallengerPublicValues> { + let sponge_state = core::array::from_fn(|i| builder.get(&var.sponge_state, i)); + let num_inputs = var2felt(builder, var.nb_inputs); + let input_buffer = core::array::from_fn(|i| builder.get(&var.input_buffer, i)); + let num_outputs = var2felt(builder, var.nb_outputs); + let output_buffer = core::array::from_fn(|i| builder.get(&var.output_buffer, i)); + + ChallengerPublicValues { + sponge_state, + num_inputs, + input_buffer, + num_outputs, + output_buffer, + } +} + /// Hash the verifying key + prep domains into a single digest. /// poseidon2( commit[0..8] || pc_start || prep_domains[N].{log_n, .size, .shift, .g}) pub fn hash_vkey( builder: &mut Builder, vk: &VerifyingKeyVariable, - prep_domains: &Array>, - prep_sorted_indices: &Array>, ) -> Array> { - let domain_slots: Var<_> = builder.eval(prep_domains.len() * 4); + let domain_slots: Var<_> = builder.eval(vk.prep_domains.len() * 4); let vkey_slots: Var<_> = builder.constant(C::N::from_canonical_usize(DIGEST_SIZE + 1)); let total_slots: Var<_> = builder.eval(vkey_slots + domain_slots); let mut inputs = builder.dyn_array(total_slots); @@ -184,19 +203,68 @@ pub fn hash_vkey( builder.set(&mut inputs, DIGEST_SIZE, vk.pc_start); let four: Var<_> = builder.constant(C::N::from_canonical_usize(4)); let one: Var<_> = builder.constant(C::N::one()); - builder.range(0, prep_domains.len()).for_each(|i, builder| { - let sorted_index = builder.get(prep_sorted_indices, i); - let domain = builder.get(prep_domains, i); - let log_n_index: Var<_> = builder.eval(vkey_slots + sorted_index * four); - let size_index: Var<_> = builder.eval(log_n_index + one); - let shift_index: Var<_> = builder.eval(size_index + one); - let g_index: Var<_> = builder.eval(shift_index + one); - let log_n_felt = var2felt(builder, domain.log_n); - let size_felt = var2felt(builder, domain.size); - builder.set(&mut inputs, log_n_index, log_n_felt); - builder.set(&mut inputs, size_index, size_felt); - builder.set(&mut inputs, shift_index, domain.shift); - builder.set(&mut inputs, g_index, domain.g); - }); + builder + .range(0, vk.prep_domains.len()) + .for_each(|i, builder| { + let sorted_index = builder.get(&vk.preprocessed_sorted_idxs, i); + let domain = builder.get(&vk.prep_domains, i); + let log_n_index: Var<_> = builder.eval(vkey_slots + sorted_index * four); + let size_index: Var<_> = builder.eval(log_n_index + one); + let shift_index: Var<_> = builder.eval(size_index + one); + let g_index: Var<_> = builder.eval(shift_index + one); + let log_n_felt = var2felt(builder, domain.log_n); + let size_felt = var2felt(builder, domain.size); + builder.set(&mut inputs, log_n_index, log_n_felt); + builder.set(&mut inputs, size_index, size_felt); + builder.set(&mut inputs, shift_index, domain.shift); + builder.set(&mut inputs, g_index, domain.g); + }); builder.poseidon2_hash(&inputs) } + +pub(crate) fn get_sorted_indices>( + machine: &StarkMachine, + proof: &ShardProof, +) -> Vec { + machine + .chips_sorted_indices(proof) + .into_iter() + .map(|x| match x { + Some(x) => x, + None => EMPTY, + }) + .collect() +} + +pub(crate) fn get_preprocessed_data>( + machine: &StarkMachine, + vk: &StarkVerifyingKey, +) -> (Vec, Vec>) { + let chips = machine.chips(); + let (prep_sorted_indices, prep_domains) = machine + .preprocessed_chip_ids() + .into_iter() + .map(|chip_idx| { + let name = chips[chip_idx].name().clone(); + let prep_sorted_idx = vk.chip_ordering[&name]; + (prep_sorted_idx, vk.chip_information[prep_sorted_idx].1) + }) + .unzip(); + (prep_sorted_indices, prep_domains) +} + +pub(crate) fn get_chip_quotient_data>( + machine: &StarkMachine, + proof: &ShardProof, +) -> Vec { + machine + .shard_chips_ordered(&proof.chip_ordering) + .map(|chip| { + let log_quotient_degree = chip.log_quotient_degree(); + QuotientDataValues { + log_quotient_degree, + quotient_size: 1 << log_quotient_degree, + } + }) + .collect() +} diff --git a/sdk/src/provers/local.rs b/sdk/src/provers/local.rs index cd4f72dc53..3c062bdeea 100644 --- a/sdk/src/provers/local.rs +++ b/sdk/src/provers/local.rs @@ -60,8 +60,8 @@ impl Prover for LocalProver { let deferred_proofs = stdin.proofs.iter().map(|p| p.0.clone()).collect(); let public_values = proof.public_values.clone(); let reduce_proof = self.prover.compress(&pk.vk, proof, deferred_proofs); - let compress_proof = self.prover.shrink(&pk.vk, reduce_proof); - let outer_proof = self.prover.wrap_bn254(&pk.vk, compress_proof); + let compress_proof = self.prover.shrink(reduce_proof); + let outer_proof = self.prover.wrap_bn254(compress_proof); let artifacts_dir = sp1_prover::build::get_groth16_artifacts_dir(); let proof = self.prover.wrap_groth16(outer_proof, artifacts_dir); Ok(SP1ProofWithPublicValues { From ef59fa22f88972097a3aa8dac81ba60f510b2920 Mon Sep 17 00:00:00 2001 From: Kevin Jue Date: Thu, 9 May 2024 18:55:35 -0700 Subject: [PATCH 03/22] fix(recursion): enable mul constraint (#686) --- recursion/core/src/cpu/air/alu.rs | 9 ++++----- recursion/program/src/lib.rs | 2 ++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/recursion/core/src/cpu/air/alu.rs b/recursion/core/src/cpu/air/alu.rs index 3ea3910b7a..61c34e91c3 100644 --- a/recursion/core/src/cpu/air/alu.rs +++ b/recursion/core/src/cpu/air/alu.rs @@ -42,11 +42,10 @@ impl CpuChip { builder .when(local.selectors.is_sub) .assert_ext_eq(a_ext.clone(), b_ext.clone() - c_ext.clone()); - // TODO: Figure out why this fails in the groth16 proof. - // builder - // .when(local.selectors.is_mul + local.selectors.is_emul) - // .assert_ext_eq(a_ext.clone(), b_ext.clone() * c_ext.clone()); - // // For div operation, we assert that b == a * c (equivalent to a == b / c). + builder + .when(local.selectors.is_mul) + .assert_ext_eq(a_ext.clone(), b_ext.clone() * c_ext.clone()); + // For div operation, we assert that b == a * c (equivalent to a == b / c). builder .when(local.selectors.is_div) .assert_ext_eq(b_ext, a_ext * c_ext); diff --git a/recursion/program/src/lib.rs b/recursion/program/src/lib.rs index caf5ca0b92..1841bc21f5 100644 --- a/recursion/program/src/lib.rs +++ b/recursion/program/src/lib.rs @@ -1,3 +1,5 @@ +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] #![allow(clippy::type_complexity)] #![allow(clippy::too_many_arguments)] From 58b0f33ca9324630a2532663992f1db183be13b6 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Thu, 9 May 2024 22:44:58 -0700 Subject: [PATCH 04/22] feat: ci refactor (#684) --- .github/actions/setup/action.yml | 5 - .github/workflows/pr.yml | 148 +- .github/workflows/pr_lint.yml | 19 + .github/workflows/tests.yml | 103 - core/src/cpu/trace.rs | 8 +- core/src/stark/machine.rs | 10 - core/src/stark/quotient.rs | 12 +- core/src/utils/mod.rs | 12 +- examples/Cargo.lock | 5859 +++++++++++++++++ examples/Cargo.toml | 15 + examples/Makefile | 6 +- .../programs/aggregation/Cargo.lock | 947 +++ .../programs/aggregation/Cargo.toml | 13 + .../elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 149172 bytes .../programs/aggregation/src/main.rs | 68 + .../aggregation/programs/fibonacci/Cargo.lock | 764 +++ .../aggregation/programs/fibonacci/Cargo.toml | 8 + .../fibonacci/elf/riscv32im-succinct-zkvm-elf | Bin 0 -> 127764 bytes .../programs/fibonacci/src/main.rs | 20 + examples/aggregation/script/Cargo.lock | 5460 +++++++++++++++ examples/aggregation/script/Cargo.toml | 13 + examples/aggregation/script/build.rs | 10 + examples/aggregation/script/rust-toolchain | 3 + examples/aggregation/script/src/main.rs | 101 + .../program/elf/riscv32im-succinct-zkvm-elf | Bin 1987760 -> 1987772 bytes examples/chess/script/Cargo.lock | 228 +- examples/chess/script/Cargo.toml | 1 - examples/chess/script/build.rs | 4 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 112968 -> 115980 bytes examples/cycle-tracking/script/Cargo.toml | 1 - .../program/elf/riscv32im-succinct-zkvm-elf | Bin 127612 -> 127616 bytes examples/fibonacci/script/Cargo.toml | 1 - examples/fibonacci/script/bin/execute.rs | 3 +- examples/fibonacci/script/build.rs | 4 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 189940 -> 189944 bytes examples/io/script/Cargo.toml | 1 - examples/io/script/build.rs | 4 +- examples/io/script/src/main.rs | 2 +- examples/is-prime/script/Cargo.toml | 1 - examples/is-prime/script/src/main.rs | 2 +- examples/json/lib/Cargo.toml | 1 - .../program/elf/riscv32im-succinct-zkvm-elf | Bin 196700 -> 196708 bytes examples/json/script/Cargo.toml | 1 - examples/json/script/build.rs | 4 +- examples/json/script/src/main.rs | 2 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 2159712 -> 2162920 bytes examples/regex/script/Cargo.toml | 1 - examples/regex/script/src/main.rs | 2 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 295308 -> 295424 bytes examples/rsa/script/Cargo.toml | 1 - examples/rsa/script/build.rs | 4 +- examples/rsa/script/src/main.rs | 2 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 198156 -> 200444 bytes examples/ssz-withdrawals/script/Cargo.toml | 1 - examples/ssz-withdrawals/script/build.rs | 4 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 1174696 -> 1174652 bytes examples/tendermint/script/Cargo.toml | 1 - examples/tendermint/script/build.rs | 4 +- helper/src/lib.rs | 2 +- recursion/gnark/cmd/verify.go | 14 +- recursion/program/src/lib.rs | 3 +- .../elf/riscv32im-succinct-zkvm-elf | Bin 113224 -> 116200 bytes 62 files changed, 13697 insertions(+), 206 deletions(-) create mode 100644 .github/workflows/pr_lint.yml delete mode 100644 .github/workflows/tests.yml create mode 100644 examples/Cargo.lock create mode 100644 examples/Cargo.toml create mode 100644 examples/aggregation/programs/aggregation/Cargo.lock create mode 100644 examples/aggregation/programs/aggregation/Cargo.toml create mode 100755 examples/aggregation/programs/aggregation/elf/riscv32im-succinct-zkvm-elf create mode 100644 examples/aggregation/programs/aggregation/src/main.rs create mode 100644 examples/aggregation/programs/fibonacci/Cargo.lock create mode 100644 examples/aggregation/programs/fibonacci/Cargo.toml create mode 100755 examples/aggregation/programs/fibonacci/elf/riscv32im-succinct-zkvm-elf create mode 100644 examples/aggregation/programs/fibonacci/src/main.rs create mode 100644 examples/aggregation/script/Cargo.lock create mode 100644 examples/aggregation/script/Cargo.toml create mode 100644 examples/aggregation/script/build.rs create mode 100644 examples/aggregation/script/rust-toolchain create mode 100644 examples/aggregation/script/src/main.rs diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index b7865365db..6b2de798b2 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -45,8 +45,3 @@ runs: shell: bash run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain nightly-2024-04-17 -y - source $HOME/.cargo/env - rustup set profile minimal - rustup component add rustfmt clippy - rustup show - echo "$HOME/.cargo/bin" >> $GITHUB_PATH diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 72857c6708..4cc2006622 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -1,19 +1,141 @@ -name: PR Lint +name: PR on: - pull_request_target: - types: - - opened - - edited - -permissions: - pull-requests: read + push: + branches: [main] + pull_request: + branches: + - "**" + paths: + - "cli/**" + - "core/**" + - "prover/**" + - "recursion/**" + - "sdk/**" + - ".github/workflows/**" + merge_group: + types: [checks_requested] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true jobs: - main: - name: Title - runs-on: warp-ubuntu-latest-arm64-4x + test-x86: + name: Test (x86-64) + runs-on: runs-on,runner=64cpu-linux-x64 + env: + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + steps: + - name: Checkout sources + uses: actions/checkout@v2 + + - name: Setup CI + uses: ./.github/actions/setup + + - name: Run cargo check + uses: actions-rs/cargo@v1 + with: + command: check + toolchain: nightly-2024-04-17 + args: --all-targets --all-features + + - name: Run cargo test + uses: actions-rs/cargo@v1 + with: + command: test + toolchain: nightly-2024-04-17 + args: --release -- --nocapture + env: + RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native + RUST_BACKTRACE: 1 + FRI_QUERIES: 1 + SP1_DEV: 1 + + test-arm: + name: Test (ARM) + runs-on: runs-on,runner=64cpu-linux-arm64 + env: + CARGO_NET_GIT_FETCH_WITH_CLI: "true" steps: - - uses: amannn/action-semantic-pull-request@v5 + - name: Checkout sources + uses: actions/checkout@v2 + + - name: Setup CI + uses: ./.github/actions/setup + + - name: Run cargo check + uses: actions-rs/cargo@v1 + with: + command: check + toolchain: nightly-2024-04-17 + args: --all-targets --all-features + + - name: Run cargo test + uses: actions-rs/cargo@v1 + with: + command: test + toolchain: nightly-2024-04-17 + args: --release env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native + RUST_BACKTRACE: 1 + FRI_QUERIES: 1 + SP1_DEV: 1 + + lint: + name: Formatting & Clippy + runs-on: runs-on,runner=8cpu-linux-x64 + env: + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + steps: + - name: Checkout sources + uses: actions/checkout@v2 + + - name: Setup CI + uses: ./.github/actions/setup + + - name: Run cargo fmt + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check + env: + CARGO_INCREMENTAL: 1 + + - name: Run cargo clippy + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --all-features --all-targets -- -D warnings -A incomplete-features + env: + CARGO_INCREMENTAL: 1 + + examples: + name: Examples + runs-on: runs-on,runner=8cpu-linux-x64 + env: + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + steps: + - name: Checkout sources + uses: actions/checkout@v2 + + - name: Setup CI + uses: ./.github/actions/setup + + - name: Install SP1 toolchain + run: | + curl -L https://sp1.succinct.xyz | bash + ~/.sp1/bin/sp1up + ~/.sp1/bin/cargo-prove prove --version + + - name: Install SP1 CLI + run: | + cd cli + cargo install --locked --path . + cd ~ + + - name: Run cargo check + run: | + RUSTFLAGS="-Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native" \ + cargo check --manifest-path examples/Cargo.toml --all-targets --all-features \ No newline at end of file diff --git a/.github/workflows/pr_lint.yml b/.github/workflows/pr_lint.yml new file mode 100644 index 0000000000..72857c6708 --- /dev/null +++ b/.github/workflows/pr_lint.yml @@ -0,0 +1,19 @@ +name: PR Lint + +on: + pull_request_target: + types: + - opened + - edited + +permissions: + pull-requests: read + +jobs: + main: + name: Title + runs-on: warp-ubuntu-latest-arm64-4x + steps: + - uses: amannn/action-semantic-pull-request@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml deleted file mode 100644 index d47ac311dd..0000000000 --- a/.github/workflows/tests.yml +++ /dev/null @@ -1,103 +0,0 @@ -name: Tests - -on: - push: - branches: [main] - pull_request: - branches: - - "**" - paths: - - "core/**" - - "recursion/**" - - "sdk/**" - - "examples/fibonacci/**" - - ".github/workflows/**" - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - test: - name: SP1 Prover E2E - runs-on: warp-ubuntu-latest-arm64-32x - env: - CARGO_NET_GIT_FETCH_WITH_CLI: "true" - steps: - - name: Checkout sources - uses: actions/checkout@v2 - - - name: Setup CI - uses: ./.github/actions/setup - with: - pull_token: ${{ secrets.PULL_TOKEN }} - - - name: Run cargo test - uses: actions-rs/cargo@v1 - with: - command: test - args: -p sp1-prover --release - env: - RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native - RUST_LOG: info - RUST_BACKTRACE: 1 - CARGO_INCREMENTAL: 1 - FRI_QUERIES: 1 - SP1_DEV: 1 - - test-main: - name: SP1 Tests - runs-on: warp-ubuntu-latest-arm64-32x - if: github.ref == 'refs/heads/main' - steps: - - name: Checkout sources - uses: actions/checkout@v2 - - - name: Setup CI - uses: ./.github/actions/setup - with: - pull_token: ${{ secrets.PULL_TOKEN }} - - - name: Run cargo test - uses: actions-rs/cargo@v1 - with: - command: test - args: -p sp1-core -p sp1-recursion-compiler -p sp1-recursion-program -p sp1-recursion-circuit -p sp1-prover --release - env: - RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native - RUST_LOG: 1 - RUST_BACKTRACE: 1 - CARGO_INCREMENTAL: 1 - FRI_QUERIES: 1 - SP1_DEV: true - - lints: - name: Formatting & Clippy - runs-on: warp-ubuntu-latest-arm64-8x - if: "! contains(toJSON(github.event.commits.*.message), '[skip-ci]')" - env: - CARGO_NET_GIT_FETCH_WITH_CLI: "true" - steps: - - name: Checkout sources - uses: actions/checkout@v2 - - - name: Setup CI - uses: ./.github/actions/setup - with: - pull_token: ${{ secrets.PULL_TOKEN }} - - - name: Run cargo fmt - uses: actions-rs/cargo@v1 - with: - command: fmt - args: --all -- --check - env: - CARGO_INCREMENTAL: 1 - - - name: Run cargo clippy - uses: actions-rs/cargo@v1 - with: - command: clippy - args: --all-features --all-targets -- -D warnings -A incomplete-features - env: - CARGO_INCREMENTAL: 1 diff --git a/core/src/cpu/trace.rs b/core/src/cpu/trace.rs index beb2e3acd1..e5d5b8320d 100644 --- a/core/src/cpu/trace.rs +++ b/core/src/cpu/trace.rs @@ -595,8 +595,12 @@ impl CpuChip { fn pad_to_power_of_two(values: &mut Vec) { let n_real_rows = values.len() / NUM_CPU_COLS; - - values.resize(n_real_rows.next_power_of_two() * NUM_CPU_COLS, F::zero()); + let padded_nb_rows = if n_real_rows < 16 { + 16 + } else { + n_real_rows.next_power_of_two() + }; + values.resize(padded_nb_rows * NUM_CPU_COLS, F::zero()); // Interpret values as a slice of arrays of length `NUM_CPU_COLS` let rows = unsafe { diff --git a/core/src/stark/machine.rs b/core/src/stark/machine.rs index 7646ae5641..89638765f3 100644 --- a/core/src/stark/machine.rs +++ b/core/src/stark/machine.rs @@ -511,8 +511,6 @@ impl std::error::Error for MachineVerificationError #[allow(non_snake_case)] pub mod tests { - use serial_test::serial; - use crate::io::SP1Stdin; use crate::runtime::tests::fibonacci_program; use crate::runtime::tests::simple_memory_program; @@ -662,7 +660,6 @@ pub mod tests { } #[test] - #[serial] fn test_fibonacci_prove() { setup_logger(); let program = fibonacci_program(); @@ -670,18 +667,11 @@ pub mod tests { } #[test] - #[serial] fn test_fibonacci_prove_batch() { - std::env::set_var("SHARD_BATCH_SIZE", "1"); - std::env::set_var("SHARD_SIZE", "16384"); - setup_logger(); let program = fibonacci_program(); let stdin = SP1Stdin::new(); run_and_prove(program, &stdin, BabyBearPoseidon2::new()); - - std::env::remove_var("SHARD_BATCH_SIZE"); - std::env::remove_var("SHARD_SIZE"); } #[test] diff --git a/core/src/stark/quotient.rs b/core/src/stark/quotient.rs index 4934df0b66..b42d386994 100644 --- a/core/src/stark/quotient.rs +++ b/core/src/stark/quotient.rs @@ -9,6 +9,8 @@ use p3_matrix::Matrix; use p3_maybe_rayon::prelude::*; use p3_util::log2_strict_usize; +use crate::air::MachineAir; + use super::folder::ProverConstraintFolder; use super::Chip; use super::Domain; @@ -31,7 +33,7 @@ pub fn quotient_values( public_values: &[Val], ) -> Vec where - A: for<'a> Air>, + A: for<'a> Air> + MachineAir>, SC: StarkGenericConfig, Mat: Matrix> + Sync, { @@ -46,7 +48,13 @@ where let ext_degree = SC::Challenge::D; - assert!(quotient_size >= PackedVal::::WIDTH); + assert!( + quotient_size >= PackedVal::::WIDTH, + "quotient size is too small: got {}, expected at least {} for chip {}", + quotient_size, + PackedVal::::WIDTH, + chip.name() + ); (0..quotient_size) .into_par_iter() diff --git a/core/src/utils/mod.rs b/core/src/utils/mod.rs index c47003d79c..0ab8a5ceea 100644 --- a/core/src/utils/mod.rs +++ b/core/src/utils/mod.rs @@ -32,8 +32,8 @@ pub const fn indices_arr() -> [usize; N] { pub fn pad_to_power_of_two(values: &mut Vec) { debug_assert!(values.len() % N == 0); let mut n_real_rows = values.len() / N; - if n_real_rows < 8 { - n_real_rows = 8; + if n_real_rows < 16 { + n_real_rows = 16; } values.resize(n_real_rows.next_power_of_two() * N, T::default()); } @@ -67,8 +67,8 @@ pub fn limbs_from_access>(cols: &[M]) pub fn pad_rows(rows: &mut Vec<[T; N]>, row_fn: impl Fn() -> [T; N]) { let nb_rows = rows.len(); let mut padded_nb_rows = nb_rows.next_power_of_two(); - if padded_nb_rows == 2 || padded_nb_rows == 1 { - padded_nb_rows = 4; + if padded_nb_rows < 16 { + padded_nb_rows = 16; } if padded_nb_rows == nb_rows { return; @@ -104,8 +104,8 @@ pub fn pad_rows_fixed( } None => { let mut padded_nb_rows = nb_rows.next_power_of_two(); - if padded_nb_rows < 8 { - padded_nb_rows = 8; + if padded_nb_rows < 16 { + padded_nb_rows = 16; } rows.resize(padded_nb_rows, dummy_row); } diff --git a/examples/Cargo.lock b/examples/Cargo.lock new file mode 100644 index 0000000000..bed424fda5 --- /dev/null +++ b/examples/Cargo.lock @@ -0,0 +1,5859 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addchain" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +dependencies = [ + "num-bigint 0.3.3", + "num-integer", + "num-traits", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "alloy" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-contract", + "alloy-core", + "alloy-eips", + "alloy-genesis", + "alloy-provider", + "alloy-rpc-client", + "alloy-serde", + "alloy-signer", + "alloy-signer-wallet", + "alloy-transport-http", + "reqwest 0.12.4", +] + +[[package]] +name = "alloy-consensus" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "serde", + "sha2 0.10.8", +] + +[[package]] +name = "alloy-contract" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-network", + "alloy-primitives", + "alloy-provider", + "alloy-rpc-types", + "alloy-sol-types", + "alloy-transport", + "futures", + "futures-util", + "thiserror", +] + +[[package]] +name = "alloy-core" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e30b83573b348305b9629a094b5331093a030514cd5713433799495cb283fea1" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-types", +] + +[[package]] +name = "alloy-dyn-abi" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545885d9b0b2c30fd344ae291439b4bfe59e48dd62fbc862f8503d98088967dc" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "const-hex", + "itoa", + "serde", + "serde_json", + "winnow 0.6.8", +] + +[[package]] +name = "alloy-eips" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "c-kzg", + "once_cell", + "serde", +] + +[[package]] +name = "alloy-genesis" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-json-abi" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786689872ec4e7d354810ab0dffd48bb40b838c047522eb031cbd47d15634849" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-json-rpc" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-network" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-json-rpc", + "alloy-primitives", + "alloy-rpc-types", + "alloy-signer", + "async-trait", + "futures-utils-wasm", + "serde", + "thiserror", +] + +[[package]] +name = "alloy-primitives" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525448f6afc1b70dd0f9d0a8145631bf2f5e434678ab23ab18409ca264cae6b3" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more", + "hex-literal", + "itoa", + "k256", + "keccak-asm", + "proptest", + "rand", + "ruint", + "serde", + "tiny-keccak", +] + +[[package]] +name = "alloy-provider" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-network", + "alloy-primitives", + "alloy-rpc-client", + "alloy-rpc-types", + "alloy-rpc-types-trace", + "alloy-transport", + "alloy-transport-http", + "async-stream", + "async-trait", + "auto_impl", + "dashmap", + "futures", + "lru", + "reqwest 0.12.4", + "serde_json", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d58d9f5da7b40e9bfff0b7e7816700be4019db97d4b6359fe7f94a9e22e42ac" +dependencies = [ + "alloy-rlp-derive", + "arrayvec", + "bytes", +] + +[[package]] +name = "alloy-rlp-derive" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a047897373be4bbb0224c1afdabca92648dc57a9c9ef6e7b0be3aff7a859c83" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "alloy-rpc-client" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-transport", + "alloy-transport-http", + "futures", + "pin-project", + "reqwest 0.12.4", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower", + "tracing", + "url", +] + +[[package]] +name = "alloy-rpc-types" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-sol-types", + "itertools 0.12.1", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-rpc-types-trace" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types", + "alloy-serde", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-serde" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-signer" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "async-trait", + "auto_impl", + "elliptic-curve", + "k256", + "thiserror", +] + +[[package]] +name = "alloy-signer-wallet" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-network", + "alloy-primitives", + "alloy-signer", + "async-trait", + "k256", + "rand", + "thiserror", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89c80a2cb97e7aa48611cbb63950336f9824a174cdf670527cc6465078a26ea1" +dependencies = [ + "alloy-json-abi", + "alloy-sol-macro-input", + "const-hex", + "heck 0.4.1", + "indexmap 2.2.6", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.61", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58894b58ac50979eeac6249661991ac40b9d541830d9a725f7714cc9ef08c23" +dependencies = [ + "alloy-json-abi", + "const-hex", + "dunce", + "heck 0.5.0", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.61", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8e71ea68e780cc203919e03f69f59e7afe92d2696fb1dcb6662f61e4031b6" +dependencies = [ + "winnow 0.6.8", +] + +[[package]] +name = "alloy-sol-types" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "399287f68d1081ed8b1f4903c49687658b95b142207d7cb4ae2f4813915343ef" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "const-hex", + "serde", +] + +[[package]] +name = "alloy-transport" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "base64 0.22.1", + "futures-util", + "futures-utils-wasm", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "url", + "wasm-bindgen-futures", +] + +[[package]] +name = "alloy-transport-http" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-transport", + "reqwest 0.12.4", + "serde_json", + "tower", + "url", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anstream" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" + +[[package]] +name = "anstyle-parse" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.5", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.5", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.5", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.5", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.5", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "array-macro" +version = "2.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "220a2c618ab466efe41d0eace94dfeff1c35e3aa47891bdb95e1c0fefffd3c99" + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "async-trait" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "auto_impl" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "axum" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1236b4b292f6c4d6dc34604bb5120d85c3fe1d1aa596bd5cc52ca054d13e7b9e" +dependencies = [ + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.3.1", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "backtrace" +version = "0.3.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "serde", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[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 = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + +[[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 = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "blake3" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "rayon", +] + +[[package]] +name = "blake3-zkvm" +version = "0.1.0" +source = "git+https://github.com/sp1-patches/BLAKE3.git?branch=patch-blake3_zkvm/v.1.0.0#bac2d59f9122b07a4d91475560b4c3214ae62444" + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "bls12_381" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c196a77437e7cc2fb515ce413a6401291578b5afc8ecb29a3c7ab957f05941" +dependencies = [ + "ff 0.12.1", + "group 0.12.1", + "pairing", + "rand_core", + "subtle", +] + +[[package]] +name = "blst" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +dependencies = [ + "serde", +] + +[[package]] +name = "c-kzg" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf100c4cea8f207e883ff91ca886d621d8a166cb04971dfaa9bb8fd99ed95df" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "serde", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.23", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" +dependencies = [ + "jobserver", + "libc", + "once_cell", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chess-script" +version = "0.1.0" +dependencies = [ + "sp1-helper", + "sp1-sdk", +] + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.5", +] + +[[package]] +name = "clap" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.1", +] + +[[package]] +name = "clap_derive" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "colorchoice" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-hex" +version = "1.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ba00838774b4ab0233e355d26710fbfc8327a05c017f6dc4873f876d1f79f78" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "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 0.14.7", + "typenum", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "fiat-crypto", + "platforms", + "rustc_version 0.4.0", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "cycle-tracking-script" +version = "0.1.0" +dependencies = [ + "sp1-helper", + "sp1-sdk", +] + +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.61", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "der" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" +dependencies = [ + "const-oid 0.7.1", + "crypto-bigint 0.3.2", + "pem-rfc7468", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid 0.9.6", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.0", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid 0.9.6", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der 0.7.9", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki 0.7.3", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8 0.10.2", + "signature", +] + +[[package]] +name = "ed25519-consensus" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" +dependencies = [ + "curve25519-dalek-ng", + "hex", + "rand_core", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint 0.5.5", + "digest 0.10.7", + "ff 0.13.0", + "generic-array 0.14.7", + "group 0.13.0", + "pkcs8 0.10.2", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-as-inner" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "byteorder", + "ff_derive", + "rand_core", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" +dependencies = [ + "addchain", + "cfg-if", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38793c55593b33412e3ae40c2c9781ffaa6f438f6f8c10f24e71846fbd7ae01e" + +[[package]] +name = "fibonacci-script" +version = "0.1.0" +dependencies = [ + "itertools 0.12.1", + "sha2 0.10.8", + "sp1-helper", + "sp1-sdk", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "flex-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" +dependencies = [ + "paste", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "futures-utils-wasm" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[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 = "generic-array" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe739944a5406424e080edccb6add95685130b9f160d5407c639c7df0c5836b0" +dependencies = [ + "serde", + "typenum", +] + +[[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 = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "git2" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70" +dependencies = [ + "bitflags 2.5.0", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff 0.12.1", + "memuse", + "rand_core", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.0", + "rand_core", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 1.1.0", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" + +[[package]] +name = "halo2" +version = "0.1.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a23c779b38253fe1538102da44ad5bd5378495a61d2c4ee18d64eaa61ae5995" +dependencies = [ + "halo2_proofs", +] + +[[package]] +name = "halo2_proofs" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e925780549adee8364c7f2b685c753f6f3df23bde520c67416e93bf615933760" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "pasta_curves 0.4.1", + "rand_core", + "rayon", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hickory-proto" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.4.0", + "ipnet", + "once_cell", + "rand", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand", + "resolv-conf", + "smallvec", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +dependencies = [ + "bytes", + "futures-core", + "http 1.1.0", + "http-body 1.0.0", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.4", + "http 1.1.0", + "http-body 1.0.0", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.28", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.28", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.3.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "hyper 1.3.1", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[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 = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", + "serde", +] + +[[package]] +name = "indicatif" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-script" +version = "0.1.0" +dependencies = [ + "serde", + "sp1-helper", + "sp1-sdk", +] + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2", + "widestring", + "windows-sys 0.48.0", + "winreg 0.50.0", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-prime-script" +version = "0.1.0" +dependencies = [ + "sp1-sdk", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-script" +version = "0.1.0" +dependencies = [ + "lib", + "serde", + "serde_json", + "sp1-helper", + "sp1-sdk", +] + +[[package]] +name = "jubjub" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a575df5f985fe1cd5b2b05664ff6accfc46559032b954529fd225a2168d27b0f" +dependencies = [ + "bitvec", + "bls12_381", + "ff 0.12.1", + "group 0.12.1", + "rand_core", + "subtle", +] + +[[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 0.10.8", + "signature", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keccak-asm" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47a3633291834c4fbebf8673acbc1b04ec9d151418ff9b8e26dcd79129928758" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin 0.5.2", +] + +[[package]] +name = "lib" +version = "0.1.0" +dependencies = [ + "serde", +] + +[[package]] +name = "libc" +version = "0.2.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" + +[[package]] +name = "libgit2-sys" +version = "0.16.2+1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.5.0", + "libc", +] + +[[package]] +name = "libz-sys" +version = "1.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "memuse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint 0.4.5", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "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-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec", + "zeroize", +] + +[[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-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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 0.4.5", + "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", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openssl" +version = "0.10.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +dependencies = [ + "bitflags 2.5.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p3-air" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-field", + "p3-matrix", +] + +[[package]] +name = "p3-baby-bear" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "num-bigint 0.4.5", + "p3-field", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand", + "serde", +] + +[[package]] +name = "p3-blake3" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "blake3", + "p3-symmetric", +] + +[[package]] +name = "p3-bn254-fr" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "ff 0.13.0", + "num-bigint 0.4.5", + "p3-field", + "p3-poseidon2", + "p3-symmetric", + "rand", + "serde", +] + +[[package]] +name = "p3-challenger" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-field", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-commit" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-challenger", + "p3-field", + "p3-matrix", + "p3-util", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "num-bigint 0.4.5", + "num-traits", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-fri" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-interpolation", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-interpolation" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-util", +] + +[[package]] +name = "p3-keccak" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-symmetric", + "tiny-keccak", +] + +[[package]] +name = "p3-keccak-air" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-air", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-matrix" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand", + "serde", + "tracing", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "rayon", +] + +[[package]] +name = "p3-mds" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand", +] + +[[package]] +name = "p3-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-commit", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-poseidon2" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "gcd", + "p3-field", + "p3-mds", + "p3-symmetric", + "rand", +] + +[[package]] +name = "p3-symmetric" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "serde", +] + +[[package]] +name = "p3-uni-stark" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-air", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-util" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "serde", +] + +[[package]] +name = "pairing" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135590d8bdba2b31346f9cd1fb2a912329f5135e832a4f422942eb6ead8b6b3b" +dependencies = [ + "group 0.12.1", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[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 3.1.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking_lot" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.5", +] + +[[package]] +name = "pasta_curves" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc65faf8e7313b4b1fbaa9f7ca917a0eed499a9663be71477f87993604341d8" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "lazy_static", + "rand", + "static_assertions", + "subtle", +] + +[[package]] +name = "pasta_curves" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095" +dependencies = [ + "blake2b_simd", + "ff 0.13.0", + "group 0.13.0", + "lazy_static", + "rand", + "static_assertions", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pem-rfc7468" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01de5d978f34aa4b2296576379fcc416034702fd94117c56ffd8a1a767cefb30" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs1" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a78f66c04ccc83dd4486fd46c33896f4e17b24a7a3a6400dedc48ed0ddd72320" +dependencies = [ + "der 0.5.1", + "pkcs8 0.8.0", + "zeroize", +] + +[[package]] +name = "pkcs8" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" +dependencies = [ + "der 0.5.1", + "spki 0.5.4", + "zeroize", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.9", + "spki 0.7.3", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "platforms" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" + +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[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 = "proptest" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.5.0", + "lazy_static", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax 0.8.3", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "prost" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f5d036824e4761737860779c906171497f6d55681139d8312388f8fe398922" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9554e3ab233f0a932403704f1a1d08c30d5ccd931adfdfa1e8b5a19b52c1d55a" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "prost-types" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3235c33eb02c1f1e212abdbe34c78b264b038fb58ca612664343271e36e55ffe" +dependencies = [ + "prost", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[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 = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rayon-scan" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f87cc11a0140b4b0da0ffc889885760c61b13672d80a908920b2c0df078fa14" +dependencies = [ + "rayon", +] + +[[package]] +name = "redox_syscall" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +dependencies = [ + "bitflags 2.5.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.6", + "regex-syntax 0.8.3", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.3", +] + +[[package]] +name = "regex-script" +version = "0.1.0" +dependencies = [ + "sp1-helper", + "sp1-sdk", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "hickory-resolver", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", + "hyper-rustls", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", + "winreg 0.50.0", +] + +[[package]] +name = "reqwest" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.3.1", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 2.1.2", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg 0.52.0", +] + +[[package]] +name = "reqwest-middleware" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a735987236a8e238bf0296c7e351b999c188ccc11477f311b82b55c93984216" +dependencies = [ + "anyhow", + "async-trait", + "http 0.2.12", + "reqwest 0.11.27", + "serde", + "task-local-extensions", + "thiserror", +] + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin 0.9.8", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "git+https://github.com/GregAC/rrs.git#b23afc16b4e6a1fb5c4a73eb1e337e9400816507" +dependencies = [ + "downcast-rs", + "num_enum", + "paste", +] + +[[package]] +name = "rsa" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf22754c49613d2b3b119f0e5d46e34a2c628a937e3024b8762de4e7d8c710b" +dependencies = [ + "byteorder", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-iter", + "num-traits", + "pkcs1", + "pkcs8 0.8.0", + "rand_core", + "smallvec", + "subtle", + "zeroize", +] + +[[package]] +name = "rsa-script" +version = "0.1.0" +dependencies = [ + "rsa", + "sp1-helper", + "sp1-sdk", +] + +[[package]] +name = "ruint" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f308135fef9fc398342da5472ce7c484529df23743fb7c734e0f3d472971e62" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp", + "num-bigint 0.4.5", + "num-traits", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f86854cf50259291520509879a5c294c3c9a4c334e9ff65071c51e42ef1e2343" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.23", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092474d1a01ea8278f69e6a358998405fae5b8b963ddaeb2b0b04a128bf1dfb0" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[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 3.1.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scc" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ad2bbb0ae5100a07b7a6f2ed7ab5fd0045551a4c507989b7a620046ea3efdc" +dependencies = [ + "sdd", +] + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sdd" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84345e4c9bd703274a082fb80caaa99b7612be48dfaa1dd9266577ec412309d" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der 0.7.9", + "generic-array 0.14.7", + "pkcs8 0.10.2", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +dependencies = [ + "bitflags 2.5.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[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_bytes" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_cbor" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +dependencies = [ + "half", + "serde", +] + +[[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.61", +] + +[[package]] +name = "serde_json" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.6", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "serial_test" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" +dependencies = [ + "futures", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sha3-asm" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9b57fd861253bff08bb1919e995f90ba8f4889de2726091c8876f3a4e823b40" +dependencies = [ + "cc", + "cfg-if", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core", +] + +[[package]] +name = "size" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fed904c7fb2856d868b92464fc8fa597fce366edea1a9cbfaa8cb5fe080bd6d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[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 = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "sp1-aggregation-example-script" +version = "0.1.0" +dependencies = [ + "hex", + "sp1-helper", + "sp1-sdk", + "tracing", +] + +[[package]] +name = "sp1-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "arrayref", + "bincode", + "blake3", + "blake3-zkvm", + "cfg-if", + "curve25519-dalek", + "elf", + "elliptic-curve", + "generic-array 1.0.0", + "hex", + "itertools 0.12.1", + "k256", + "log", + "nohash-hasher", + "num", + "num_cpus", + "p3-air", + "p3-baby-bear", + "p3-blake3", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-keccak", + "p3-keccak-air", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-uni-stark", + "p3-util", + "rayon-scan", + "rrs-lib", + "serde", + "serde_with", + "serial_test", + "size", + "snowbridge-amcl", + "sp1-derive", + "sp1-primitives", + "strum", + "strum_macros", + "tempfile", + "tracing", + "tracing-forest", + "tracing-subscriber", + "typenum", + "web-time", +] + +[[package]] +name = "sp1-derive" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sp1-helper" +version = "0.1.0" +dependencies = [ + "cargo_metadata", + "chrono", +] + +[[package]] +name = "sp1-primitives" +version = "0.1.0" +dependencies = [ + "itertools 0.12.1", + "lazy_static", + "p3-baby-bear", + "p3-field", + "p3-poseidon2", + "p3-symmetric", +] + +[[package]] +name = "sp1-prover" +version = "0.1.0" +dependencies = [ + "anyhow", + "backtrace", + "bincode", + "clap", + "dirs", + "futures", + "hex", + "indicatif", + "itertools 0.12.1", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-field", + "rayon", + "reqwest 0.11.27", + "serde", + "serde_json", + "serial_test", + "sha2 0.10.8", + "size", + "sp1-core", + "sp1-primitives", + "sp1-recursion-circuit", + "sp1-recursion-compiler", + "sp1-recursion-core", + "sp1-recursion-gnark-ffi", + "sp1-recursion-program", + "subtle-encoding", + "tempfile", + "tokio", + "tracing", + "tracing-appender", + "tracing-subscriber", +] + +[[package]] +name = "sp1-recursion-circuit" +version = "0.1.0" +dependencies = [ + "bincode", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-commit", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-util", + "serde", + "sp1-core", + "sp1-recursion-compiler", + "sp1-recursion-core", + "sp1-recursion-derive", + "sp1-recursion-program", +] + +[[package]] +name = "sp1-recursion-compiler" +version = "0.1.0" +dependencies = [ + "backtrace", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-commit", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-poseidon2", + "p3-symmetric", + "p3-util", + "serde", + "serde_json", + "serial_test", + "sp1-core", + "sp1-recursion-core", + "sp1-recursion-derive", + "tracing", +] + +[[package]] +name = "sp1-recursion-core" +version = "0.1.0" +dependencies = [ + "arrayref", + "backtrace", + "ff 0.13.0", + "hashbrown 0.14.5", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "serde", + "serde_with", + "sp1-core", + "sp1-derive", + "sp1-primitives", + "static_assertions", + "tracing", + "zkhash", +] + +[[package]] +name = "sp1-recursion-derive" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sp1-recursion-gnark-ffi" +version = "0.1.0" +dependencies = [ + "crossbeam", + "log", + "p3-field", + "rand", + "reqwest 0.11.27", + "serde", + "serde_json", + "sp1-recursion-compiler", + "subtle-encoding", + "tempfile", +] + +[[package]] +name = "sp1-recursion-program" +version = "0.1.0" +dependencies = [ + "array-macro", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-util", + "rand", + "serde", + "sp1-core", + "sp1-recursion-compiler", + "sp1-recursion-core", + "tracing", +] + +[[package]] +name = "sp1-sdk" +version = "0.1.0" +dependencies = [ + "alloy", + "anyhow", + "async-trait", + "axum", + "bincode", + "dirs", + "dotenv", + "futures", + "hex", + "indicatif", + "log", + "p3-commit", + "p3-field", + "p3-matrix", + "prost", + "prost-types", + "reqwest 0.11.27", + "reqwest-middleware", + "serde", + "serde_json", + "sha2 0.10.8", + "sp1-core", + "sp1-prover", + "tempfile", + "tokio", + "tracing", + "twirp", + "vergen", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" +dependencies = [ + "base64ct", + "der 0.5.1", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der 0.7.9", +] + +[[package]] +name = "ssz-withdrawals-script" +version = "0.1.0" +dependencies = [ + "sp1-helper", + "sp1-sdk", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" + +[[package]] +name = "strum_macros" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.61", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + +[[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.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn-solidity" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa0cefd02f532035d83cfec82647c6eb53140b0485220760e669f4bad489e36" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "task-local-extensions" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" +dependencies = [ + "pin-utils", +] + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "tendermint" +version = "0.34.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15ab8f0a25d0d2ad49ac615da054d6a76aa6603ff95f7d18bafdd34450a1a04b" +dependencies = [ + "bytes", + "digest 0.10.7", + "ed25519", + "ed25519-consensus", + "flex-error", + "futures", + "num-traits", + "once_cell", + "prost", + "prost-types", + "serde", + "serde_bytes", + "serde_json", + "serde_repr", + "sha2 0.10.8", + "signature", + "subtle", + "subtle-encoding", + "tendermint-proto", + "time", + "zeroize", +] + +[[package]] +name = "tendermint-light-client-verifier" +version = "0.34.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b8090d0eef9ad57b1b913b5e358e26145c86017e87338136509b94383a4af25" +dependencies = [ + "derive_more", + "flex-error", + "serde", + "tendermint", + "time", +] + +[[package]] +name = "tendermint-proto" +version = "0.34.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b797dd3d2beaaee91d2f065e7bdf239dc8d80bba4a183a288bc1279dd5a69a1e" +dependencies = [ + "bytes", + "flex-error", + "num-derive", + "num-traits", + "prost", + "prost-types", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + +[[package]] +name = "tendermint-script" +version = "0.1.0" +dependencies = [ + "bincode", + "itertools 0.12.1", + "reqwest 0.11.27", + "serde", + "serde_cbor", + "serde_json", + "sha2 0.10.8", + "sp1-core", + "sp1-helper", + "sp1-sdk", + "tendermint", + "tendermint-light-client-verifier", + "tokio", +] + +[[package]] +name = "thiserror" +version = "1.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[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.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror", + "time", + "tracing-subscriber", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-forest" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" +dependencies = [ + "ansi_term", + "smallvec", + "thiserror", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "twirp" +version = "0.3.0" +source = "git+https://github.com/github/twirp-rs.git?rev=93d4e4b#93d4e4b4a48f9112c943d2925e8dbb1106bd6a18" +dependencies = [ + "async-trait", + "axum", + "bytes", + "futures", + "http 1.1.0", + "http-body-util", + "hyper 1.3.1", + "prost", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "url", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna 0.5.0", + "percent-encoding", +] + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vergen" +version = "8.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" +dependencies = [ + "anyhow", + "cfg-if", + "git2", + "rustversion", + "time", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.61", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "zkhash" +version = "0.2.0" +source = "git+https://github.com/HorizenLabs/poseidon2#bb476b9ca38198cf5092487283c8b8c5d4317c4e" +dependencies = [ + "ark-ff 0.4.2", + "ark-std 0.4.0", + "bitvec", + "blake2", + "bls12_381", + "byteorder", + "cfg-if", + "group 0.12.1", + "group 0.13.0", + "halo2", + "hex", + "jubjub", + "lazy_static", + "pasta_curves 0.5.1", + "rand", + "serde", + "sha2 0.10.8", + "sha3", + "subtle", +] diff --git a/examples/Cargo.toml b/examples/Cargo.toml new file mode 100644 index 0000000000..a6ea63df0d --- /dev/null +++ b/examples/Cargo.toml @@ -0,0 +1,15 @@ +[workspace] +members = [ + "aggregation/script", + "chess/script", + "cycle-tracking/script", + "fibonacci/script", + "io/script", + "is-prime/script", + "json/lib", + "json/script", + "regex/script", + "rsa/script", + "ssz-withdrawals/script", + "tendermint/script", +] diff --git a/examples/Makefile b/examples/Makefile index 5cf4b3343a..4fcf1b177e 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -3,9 +3,9 @@ SHELL := /bin/bash all: @for dir in */ ; do \ - if [ -d "$${dir}program" ]; then \ - echo "Building in $${dir}program..."; \ - cd $${dir}program && cargo prove build || { echo "Failed at command: cd $${dir}program && cargo prove build"; exit 1; }; \ + if [ -d "$${dir}script" ]; then \ + echo "Building in $${dir}script..."; \ + cd $${dir}script && cargo check || { echo "Failed at command: cd $${dir}script && cargo check"; exit 1; }; \ cd ../../; \ else \ echo "No program directory in $${dir}, skipping..."; \ diff --git a/examples/aggregation/programs/aggregation/Cargo.lock b/examples/aggregation/programs/aggregation/Cargo.lock new file mode 100644 index 0000000000..9b3f983126 --- /dev/null +++ b/examples/aggregation/programs/aggregation/Cargo.lock @@ -0,0 +1,947 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aggregation-program" +version = "0.1.0" +dependencies = [ + "hex", + "sha2", + "sp1-zkvm", +] + +[[package]] +name = "anyhow" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "autocfg" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" + +[[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", + "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 = "either" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" + +[[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", + "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 = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[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.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +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 = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[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 = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3135b08af27d103b0a51f2ae0f8632117b7b185ccf931445affa8df530576a41" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +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.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "p3-baby-bear" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "num-bigint", + "p3-field", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools", + "num-bigint", + "num-traits", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-matrix" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand", + "serde", + "tracing", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" + +[[package]] +name = "p3-mds" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand", +] + +[[package]] +name = "p3-poseidon2" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "gcd", + "p3-field", + "p3-mds", + "p3-symmetric", + "rand", +] + +[[package]] +name = "p3-symmetric" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools", + "p3-field", + "serde", +] + +[[package]] +name = "p3-util" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "serde", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +dependencies = [ + "arrayvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[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 = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro2" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" +dependencies = [ + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" +dependencies = [ + "proc-macro-crate 1.3.1", + "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 = "serde" +version = "1.0.200" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.200" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "git+https://github.com/sp1-patches/RustCrypto-hashes.git?branch=patch-v0.10.8#3d692aa90b91513886d757d01f8fc2d51c0ec0d7" +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" +source = "git+https://github.com/succinctlabs/sp1.git?rev=v1.0.0-testnet#e721b246243e40376f7b75d7330e53c7351b727f" +dependencies = [ + "anyhow", + "bincode", + "cfg-if", + "getrandom", + "hex", + "k256", + "num", + "rand", + "serde", + "snowbridge-amcl", +] + +[[package]] +name = "sp1-primitives" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/sp1.git?rev=v1.0.0-testnet#e721b246243e40376f7b75d7330e53c7351b727f" +dependencies = [ + "itertools", + "lazy_static", + "p3-baby-bear", + "p3-field", + "p3-poseidon2", + "p3-symmetric", +] + +[[package]] +name = "sp1-zkvm" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/sp1.git?rev=v1.0.0-testnet#e721b246243e40376f7b75d7330e53c7351b727f" +dependencies = [ + "bincode", + "cfg-if", + "getrandom", + "k256", + "libm", + "once_cell", + "p3-baby-bear", + "p3-field", + "rand", + "serde", + "sha2", + "sp1-precompiles", + "sp1-primitives", +] + +[[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.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[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/examples/aggregation/programs/aggregation/Cargo.toml b/examples/aggregation/programs/aggregation/Cargo.toml new file mode 100644 index 0000000000..0e25eec36d --- /dev/null +++ b/examples/aggregation/programs/aggregation/Cargo.toml @@ -0,0 +1,13 @@ +[workspace] +[package] +version = "0.1.0" +name = "aggregation-program" +edition = "2021" + +[dependencies] +hex = "0.4.3" +sha2 = "0.10.8" +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git", features = ["verify"], rev = "v1.0.0-testnet" } + +[patch.crates-io] +sha2-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes.git", package = "sha2", branch = "patch-v0.10.8" } \ No newline at end of file diff --git a/examples/aggregation/programs/aggregation/elf/riscv32im-succinct-zkvm-elf b/examples/aggregation/programs/aggregation/elf/riscv32im-succinct-zkvm-elf new file mode 100755 index 0000000000000000000000000000000000000000..3bc26ea23d1e92445925aa3f628c58278aa84536 GIT binary patch literal 149172 zcmeFa349#Ing3lqJ>5Dj%WhjTjsaOM4Ym*tFj!3pkP)%O8J5cmfk2GM7KE^1z!oGS zS;^xWA2?uWEE96zOY*@HlfhCTmlP~?IP=+$CQpVM$CrF0T@}k4{^iQ2On+{BODXwS@;;N^Jfu|f z=*jx?<|#_aXJq;LrxlXgk@3wO?+Baa9F)9Ji4m6~_*$8{@omdX4t zAHm=MRww=Azkg8R9~Afp1^z*Se^B86lN4|a<6U>!n2=lD5^}yRyV>?y~#lsm0kdE+OOZoS>fx1UPBBj3*AI^|ol49D&^ zRy`+m$DEssRoDB|EVlmt9?fE#-=Aj9x&L!CQ(ON&nkki`*w3piZ2X@%?RUPXonMwzq1%Uc}$B+JPq&KgF|lFAHjQC_20ecUB)OoHkWD| zSJp!F-|p38Q`rK|YY(D%7xbk)Rcq7;9VR?rteU0u;cad?V-(Ok1ieGhI|RK$(A$8n zWQu3g7w==u(HwV|sGU2W)^16?h*y4G^5kjW`mS)D0$AdNFJ*tty6?-4S1 z-(?vcIzs-6wfxKOq4U9!?-sD+yBnF7ZzJSZ>2&OwPS>*QPTQ)qtVWR4<}h;79dhhu_zZgJHa1s7 z{}4QB#*eaWvu&A?XgkL++w-Ys4LtV0dG8toc8hldy2;8X6akP*d3%Rjqqs5r! z94af#MKY$s>%N`LbL^PmB+;2kTa`Yc)Ya;f@0yjCDqSbfPizNcANm+RMYrmFXX<{4 z-Sd-m=;cS~1N1HDJG4S&-iN#r!SB=G*mG0=otp|f_6p_XY=I9iRI9pV+?(G^lxhA8 zNn6eK9z*K)n`|R~A9B%ThvE}y+w;0TlSY+uY{ z{|26u!OIE0KRHJ5#CMUt#+&Uh{U3t&kF(G$sx+=?f0nfO@O?K&W%@iO)7FWaUeGF0M_cc< zLWw$X?c-Jan?2AZ37^;T4Sm*GjHRh0zx2n+%~AehoBqI$k)Tgbst%jbLSJZqj;#Ve zMqQebf6W7KHGEuk7yLUJc@i0|W!x_`v~I=j#+O;)_%p~2cGzsISLn^KxjCicq5N=S zvpquY#rA|VG8H>Ho@?16`+hQ?_Gj&}%0;eCw_NOR%o5#ssGc5)(-qbFBV?fm6*6)X z?Yl>85pt<93_mYV^^eWl=ayIKG_5c335EZVBO^h7kR$9{w?d8-awPQ9e989#wncP$ zd z|LV$j{V;kaQ>K4{g|BVEAKk)RhNhL$I&v2}jQR}plNIW;RI_eJ(N=|B4+T0~JtJcl z_`3H<--dNPeb72y^kPQ8|7&J^5A9p(puYWKr3%^`Q*n6?$5iLm&G~+E>*n;=Atn{EyhL{&v5bfAHb^73+H6el7gl z{qlFLH~g*RmD73&bC;k$3C7SFKa+9X{$cv_uOFg6-}yWGlRjL3qNyGgzoz3r9=x^n z@8d!I=70x#J|qt||M+kBt!vGP?^|=534*O-8>aRk0bsasuJ zimy@XPPwYojoesDdMW9p$Wp00?UC`?*WEodgdfjycW9MYnd-vwqE^x$C~*H<&?MQ z`coaN(sRYX+Vf9sj@5QCb42CMEV|IK_8j9zcwS(A!w>f?@pdMTc1CTz&)f0x<^HIZ z+dT_eF0^*L6*n4AUV-SOGRJDk7k%Jc#;CwQi~W&zWAHaj@gajbNo=DtbD6QOV9hvZ zCO(G#UZ&RNuNmj&*N%5)E;82TNm|%&_4gvRE|;|2mT`jbYrJBW!S8o-jbgKs_cNJ~ z?@1a?L()j^>`~Dso=Z|H5$Vo%#wU&FT;9#ys{9?y%Ozi5D#$mO()r9|i~{EDMs%Q; z`Fn?Q8Ww|*GW>?chRoB`O^Xeg(06da+(0F!bQd@imKf=)-`24M|HUOLEf_EH zZdZ;GeS3*Px=NHAh5o&ieI-}tbzWMiqPK$a(n2G8%>*O;_CkYnWxBP6{@n|W^eba^ zUjNdBN`v8Fl;GW^Dt%MJAYC~Qf6u;HNj`X?7=9~u%eu$9<=e-)6~7znM*ce1onkm{ z)fh+9T>QmZ+UHI?d3hoK_WvC6m;aQxsbR;L6_haUVaEzH_StdnT55`K3V$*_2D~Rc zi;uS^EV|w;mv8Jw#hS1ikvZ`i{O(7X2OG?jjc{U9A^zs_A*b*2DxPbHoV|JP`tQ7B zMwiurC3(83uf+`7)b*2~?tJ*L85@IM8=mWQt#H)|1sUEk9b4sO`0&oe*~S>NqPx(n zYAHn4Mn$dZ_zNo6Rq%WIVY?XdO$fVkHyDWMt=+N%PkdM1QzoyKiPvnZtpYk zz5TgoGmmIf(eQe3v1!Q%Lg}TORlF#CV*HYDXw_jjQcJWX@h54jC z?C)%f=UX*0_D`TkYM^ratAocsuelfQ= z|7GOI=clGcE#@nI=l}y6^q~XvH#$J|Fz;MRU+c*GNIpDQjt(`_;bRTo-fb{H9c@;$ z<1`37PJQodnnrhFy(0o`NDJ9Ll!M)!ok4%ML(zGkemq~1}6tG~ad)`dw6 zZ>1b*IZ}=^{Y{!pn%zdZ<>)LaSBTD%@8#$$(sGHDG>}#x+ju2x&Ul-w2yi3-ImERf*$nSLSig z66Yu|%<6NQb9Cn?j=de8#3+K9}}%uqhm=y zy*)>Z4+4#NN33mU8P7cxyhA5-ODu?3r@Tv!6Wfw$Yq9t+j#Y*)3syOP5B?H1P5bAR z3;Vl(ccj zFPM<2`v~d=JC+la?V0GJ*W^QnkRJXNFI)pM0U3b|i96WiJG5yzy=yo<*H_T@nh=W{Zn$I@ktI2m0zS>o$yBZ%z&7%BPBc5AQ?kg$3#qyhbDO*Q< zDSW-FDBp^ICg1JECFQ%raI3DOekngMC|_8@cv5~&2YwlSINTbQ*3s%HiSKHfmpv+D z{(-T<#IfCB^mQ109X5}{hdi!ZV(U6y$eaW}PU6_H2@)fbzccFuol*z(VXx>9WTwQi zju$_YIaf^n9`BFBuSwY<^VwcvELRzcu0HxTAapVky@T|v2fbkJgSPm3%o|t(bSC7A zKW;>K=3)nSioeag;$r3drr{iQ2R_kPgL%f$cd`!nTf@J9wBg^gi21^sq&=zpuP+5> zs^Lt`H~jmSF&8*T&n5hC+%EC;P&U2NF|QPh_5uC~wj8fke5%d>~|)ZmltLPT+j2S@Nj#>?^eV`YV*ofAC{V zSl4Vo#}apE&C!iutEc>dF? z(uB;BpE%#svD*bMx+N2nCEmGC&!2C2-+1Q}y6jV#xb9DbZ?jM9^2)l+ernGUF(mD~ zI#yjY-LykFowPr>Bj)71HI!b^8TiHcam1Ypb=>LJ4%Nxpn!C1V^VQg@jGr`J+g9;w zLyg5ZtH6eJ!YBU1nZ-VQm3;@l1+mo>w$wtGz*89v>=*M^$}*pi2KGC^5x$hVN*&#w zZ-VhU@##WrbRn_HLU+pKQN$)kxfQjeh)s^tF)N8JhPD_|uk<&;TA;K$(UyEDeuq^N ztPLvcU@YTfbbU1*vLd4M5^Z_P%Tu>Hc}LJbc-zK~+w}EiXPhzqKtze;h8Y>sIPR=Nv9g z-QrGLKRjolt-1T@5WAk(Y>D_XthIz>%`VXsKCrJre{OPDZzj*)A%EF9#0kf#{z>_) zBW%N8USyb&83yq)J)gyv5EI1TsM^jPcN;P4MT&Inco^AO6Jni=^*hqbw=*7!^_Lj+ z;kO08-_?#)i!VYO@trbjGHvA3F?R8%GQR8_8D}S)e8{(EP`;LNL$>YOa4?@$?WU}U z>iq#Nw5^u5t;YvKMyrw0suy&Om2}$HLfdL-+j``e^a|3;Ul2JTg+Dwh0iT&ujZulI z!Q41eRa*#87734voZ^p_i4AvBJtz3qmQb)xpnehXwDxO5t5yh4s0Ab5^N&<~eL-L&Da#LGD#l| z>L*rEEd6L+9?%wghg(AC*)6uyfc-F0JYc-x zzerr@^Lv;JO&~2v-p7pSs~hOwcop44y2J{u-9dV(PA3*%M8Ck?D9LXs5;YgW7Zq(FH%q)qGBc?Xkregx;F|{&BA|A3sN$f6&y^(J?_6EIl?5&0U zHqf(iWbCb-7z6JH28g|FkaS{i-C~CiioJm`9DCcS?KC!0VrvJ*-oSV%8++TxxQeZ; z4Q%-Vu{SV=V{dC!5PNHp*xEs{H}Va~-qtCJy(L`M21mr-{9oW3yuMaB&l8jT{cQMR zoy3Fi6%zOl>zFGOqpx@**Nt@Nx>L62x>di+b*ulH>rONB+_EtR#L}1>>ewi0kJzGP zSeLckX=_;5Hdyn;$0}dLw~SkDhNqS6Gve=N)>*a|!QaZPMi(Air_5uMtP}MR1F(o4 z)Uke)MCaA2L`9Fmdf2dRX7txb{E*mq1y-T9gTddze+47{E+c*9-`Gyp#>9RF`9*Jx z{QCmZ^G2l4B7NlF^E7`C+rLWe-rbg+(N9?!KW)E^t0f}i3F)WkzB1;9<=xPg7`N7G z$y(71eyVPU)(?y8>ZGiL%@5`ru_vUwwy{0qH~YEChZ1dPsm_pE;x8P_I?>FKXJJ!` z6{c(2Ls7dul-}B-qBYMEC*<4iikTbm&EWrZk~o0X5sTWN4rTL3Yo1h5kGxmI$2l*@ z5*wZ(ez*bLUdlchOQ${^igtpT;?wb>N_#J>^sYgb&eDI@&`yqaqo z(IsYW)Vwm3j;;$uO+L}F^^pb00>4jH@qUp7v z^g=%0y;5o1{+l$e$U-`FG3}Wd^FymOpUId9&+r&Aiv53=!4o6@hR3X&5$W()a^&Ce zn3X#s9Ue=L{2Ly#%q$OTn=N$({9>K1`6QK$Aw!vU%C4(~M>4kReb<*AS)U4(XZDH=eMdD-eBDK7X6u*CX$vRwcBsh(Dm?wLXuP zr^8Fp$6W>SqP%c4ye*bq+7tM``Pj5@K6|)`+vF|F=0Do3T!z2!41Vc&<ujMv`ed|>lamZ-zuFHK>%V1OXm63&)3lA<$T?oEyR&0oeAYnGI^MYk zAO3c7=Bage@P5uf;X2;=IV+Sae_uD4pSD-WoVRKyzZ1C}h&fHYL;jvUqrDt#Nls~T zI=M6Ct|qR(xR*8I&VBLOgSqb74rsuqs&gM$_^iBd9JJkb-fiTwna_iK$~*VD6?`J( zd#hggyRc#QV9d!ypHHF8b+(yK4btx2%sI)Q#XT73Vb-r~dml0QQ2%vLzAOFq2d68) zqeMAg3G=rB_EXqJ{$j>G7oESvV($j?b9(}@E&LQ&KiK1`^z<$0jxN@ZEW=-1s%6Pp zVypgpbKmv%)Ue)Y75X_U6u*A3+=rI&)Sj_^P8sj_O!RY#*}t);JaJ5pa+?QPcU!F1 zHPfz_atuFNqudsodisWZI|sTc!`xUuB)*a__I7P*D81`#<*weNZMJhSHgjX|kgSop zYxjV`TG!p=+hF5!g$#GSrPs^+dl&O}uHm-R-X!mAdk7jB{j;Ck>nyGrVlH}wj*BkF zhSC21yRA2|l}7x!4*c@n%&T+o9nNG;j&-^6C#ips`fTt^z-)l-v^9(QDr?IN*avb4 z^sCIF?3v`3F`=)i6nPgbe?h&_s6^5w%}>?y{!Ez@kC(dqWQnGYrnja;S(Xk8Iv5Ah zK|u%OAUfbrkncb`;ETXF?@Nag=+K;-9T(>%+L?@~b3G(&dVZAGPBwgeq zoBwe2C8*EL{j{zxVO_1+@jn>2W9a&b62T#3EG&mLAi@)?;_HzPUR-$ z-IJuhsMcZk6V@)}BE#$8%S6sw%3Un&6Pd7$b&Ip@OR4_l)@%QrHfjD#rgWQvKG&=M zR_j$_F8{IW1pL63?#|NR$(*Y8cjjb6{YAxOex+j=zk*M~!$VmDIB zhum@-JH;o$X9}MxKGl4t@hP)I?t^U)u6kMaO~hWoc4p_#ld`s1#+$w#);=dHn14=9 zVxRE)R*OxEJrFO<3pqzj4eWlnuHIidgZl5%d3@F>v<>c(ylT0V_w6v$f{a&)?O`mNT-t$FlLhtW2+1pKQ z!Z44;_8P%Hu)sI4J`?x`J)ici6`6fu>M0rjRg693G*_O3yelu0y!icB=rW6Y=7>Mx z*niE?y33TjLIb^LR+n$STE8=l|Ju3(V<2k|i8j6?i-^T+!(V7qondvW#F^6GD)if1 zL!E`pEtbDKlzwZK5k*&|7x${@_f}!E-yVwIdasdQjDB6ROQlb~mw3b5L+Q8g#mApu zM6HdyTe<(8HQq?uFHyF2e_8a8jzN5n*hLl(n<;aX=*V{qv7;sU4AWZ~n>|D6Ju407 zF3exHs%Qsg@fD&?twuD_qoUSM@=>qkdyjmhwi@EEM7L6}wPz^0fOm;@Wb{$i6z0I| z^NIBkN2?@`7P&-dLELJaA+*TS;Qwadqf0(y-%|(mUDF63^Ps**lk|NGYu-zdbM_Xy zRoj#^8lA;{Rf%KzMZ9PI5}M$bqw}VP4W}pSPo?4O ztem8i;}0tn(x2$b`{g8R+lHQlk9?PlPdJ73Bw~Hhnh`Q!!3W8<1Ky=&A4p`3nNIFR z4#+EV@RgND^!7Hru6A(Wql@Wt_3!ZaF9ho+Mtb^86}9&m(dqPac^mY&k@wH@egSik zIwQJO;tAB593bwngXbN}8D)~zZ$vvA(HS*{ju%L5U}>olef%BH3)MsO<4Es7hcxU@ zUv{+-{r+ARy}i*$7trsHXH~S2JzgpFx~vaqTNYyui49>cDDj#D)0&5LT%EX%#Ci@) z>w3>2*6t7!k~qkA#WK4S0GN4dk)SN5om z)gQLLa!F&2?{M{1NLnrY#F!u4hloxK$sW1%^!xVH(t2F-*D^k0FD) zJ~O(sl5!)`EYhka%^-GwPR{CfWLNfSvBna@5BV>z$zrn)>w{@OZ)vjAtUvo!@l|9! z7N5q5Piimj{5)}zo+CEn*WD_9NZ^C0?d(4r>yy{F&W2ait(n;5m>_SA_;@yN>}T;J zt5|s0Yzr4B+QQ?^_Aq;LH=&aslXsKcil?#7;WFM=xRFirZi+ia=%n9QyVd&L@uZ*R zPJ2x9o=kbxcb*QB_f)syu@Gr7Vka{wPdp@C>`r+apF*9KS<4}&)2wyATXqlqdl_A@ zp6_CO9r=DvXp7#cK+o{a`qu~gkNBBx`5MaA?)M+<+$?*D z{5)GZ5+l~*#+vFd-Mczu-A%^Rtb7KWzsxWr=V0&IhbMhSj>I0iQ(lmCUu4SaRIX8o=4UkWt|I|aVxeFyLy2!$m0yt*_>foYLG58WNnW0 zYSO2@K)fp)W-M3}99~;{&FrE5vIe}ry$`VGzfkKsTi$2a>$?8rMkX^?R;I+Oe9JmM z(Q82yY&d6~B%UW{qT;Q+)WP4f2BUOriuzRH@Y-K6KiR;z>NC3uv2#-mlQp*xeyu*& zh(T3$ zUC)}8(7zHpkjEJ(&H&0jCeag4UQ5`mFxb<}r}~kwJFPoRyE$jKhPA1f@Tl!Z44ZWR zMh>d@yPChJ@nOBfE$36gx<&qO=A*TF?D5X^^NY!MVV+aaB630uB^D-M*s)sjSkusL z3uLQnyT}1NpNITq*Hgcpm|C0XB#)4~a?zjR_n8@3s5A12J(MLPhG21SkT%)7hlsC* z!L$>RT07pnW163;gHN~H+UGx}B`0xAZB8Q6of9AX)&xIA9BA5h+aYE~J*B2#9%W6` zb1dDC*crMVA>PTEt#aroXVVIHvj@LGah9w~`eI67Ufslgc>3}#dgp+?sN)19Tb?t) zte^fs$v$qU@I2N3?Sj3~bX0uo^c<5u()JwA9>)5w-?}%`o_uhJ`xu{Kaju&FRnouQ ztwp{i{d?rX zosNCq*{1qK*1y5`d7MA}HE~;H_II{<4D}pCJ>JVI{UrX9$GXWa#AtLq+r#~#oL6Z7 zSU2}VDYq9NP4=vZHD8sj$wjBW)ETG)8{#^PE;5<@jJqt zRc*1Iyt9Qa`g|>W>zSvAvAM($mRS4DO5zEbweX;6oO_X)ZUh2^abOJhQG&-pWom7;lsx2~)HHs3) zc8@YeKNv=_j-^N(D3|^#d_%?A+bG~cMF1dYM;C_kLfYvgFDd!nf)^({0MDdA{P9TWKF9lCi*eH`^B(11)H?$ zOx7jdCRR)Ac*;|pqc1g`+$HGfGvVEh*pwWtTj;+*|0SlNV~O#S&Rkud7@E%oJ0K$loX|H83D%;n6q^;FF1fDika zPj~DH?tkFCV!VWyRm2ee4(&wGx1guw+b}X`6`I&rVq)jecf=|WY9HO^nj}M*B zx!Kdh3a5<)2?Cr z5$ln5!MA(F)@fT5zJ&A0lsgvs6o1)_H|H0}?Jti(2FCiF;m)S@hrc{zR@XwyF!q2s zJo~Pr_5(2|KMY^?rP=!Yl+5q-SrZxOz$VacyFC_vcSpE?q3D7cq4<5+SLR*8 zzLc(q1ruz}DAqwkeDbn3`eiYOd`H@lbJFRb)Gx6${3wmt|H=-|-5-L-evJ$sW0DSk zlePXVZW7#;_@{hFRtj$fdc9(OsQ;e)-TWQ2y?T8}=#hYqfqsIH2kNg0!Q2rauB`ig zeIN8p2t8wU48s59vKYx~ySV z99-UFkELY{myaA=zK-;|AYIB&IkvA-!jR`Raqqvqmz-3Jupk?cnlt zq}K)MQh(Xb&_VqtJ-NSp`A+oZ0sSYvXMg#MgUeec^_#=>M-DDuM|xe59`yg<`bkgj zFJEi{|L1s?5Ch_1>!}<3~oBVkCw?Snp!$`yH-Q{PJNg*6KH`G6K&z{X|1LJ8-eNP|$yy~gDIOjm zp2df~AL(1!&mma$U@X1lDayV?xtGufx0va{Mq)uJGu@G*{9D9?rEDK%p>yX1Grf?{ zlAFx*+t(25U1Fxc$LG7Vm6HgG9W|n9KGY#+5{KKIOC9#Cn4F_br%G$nsfJkE2D8I9 zql;O~K1{uSP7c0V-|n>6hra#oUu2IbXVOm;|1QCqcawRY%=w(08LBgf7y#?iUandq zG3?F>lZo$bybb!v{`_h2-1hSvC&E6HM$SbN6O(-;>DQHGzA+TNnSCmW*(!ZvJQOX8 zhtlR(&GZ{_BYj80Os5lO^z`2teo+y9V;{WeA&mHWA39X2wUw@tbFR!tu=8f8*&Ci=r^LaCE-mKdk z&9*uE1o2|2_a+sk&9c`f`qiM#33rA{Ok1R}O?Ml(U?;vxzUQGsoU}0ed2VLU%~zE< zZ3b=OeVTncq($%enUQc88EI%jy+&f%Hbe47f5d(s^9gA7ykSlYhtg@@nKvuy3Q3u4 ze#uMSp=^G0+P09C$>tC6@sEb_XVABU@fShYEIzT|gYY$W5&ch(Rl)eOm&v?1Chbq3 zPQQw1`)KF|{i8pI_IL96#2fhB(0>uMfAlp&>_{|mG5e3mPyOkIuhpg(zFr$GS`pK9 z3|)yHy+k=hyOn=OF0uO@WVI`lzVrTA`p$oP!5*2!Cj_^7jsz&a(V{@%ns~zV8w_r(^j4&UvC|_70_gb%l|>|4qZcWN&SH z=uIQN>|!ID|AvwN#I@k=g?GMWruWXFz01t>vSnuU6xQ$Z^Hu*H_YbBYzh8Wmx8hCT zDiysX@8femMfxa}*p#O_M7n|mbHA+rkLaiG{V(VzsUxFPhxHS2@c*KIl9-72jH0)LSY+4Jf3IJYIIdgP zaJY%2li){?vLJ||2O-i^Qv1i{n=-pDf3FMWTuOM?sX)mu^;OpcQem+^(T1$8}~t;Q_oiNexCcVJb(9c$L@F> z-znrZymA72oHl_U@*=Hup2Hm0e;wP_~_BJAq~FmH6AycJ~n}GdxKSt z;FN%Gd+n!iezWyR@NKW}xf#5l06xzrv3I1;0pIqZ88}}6-}Y)|Uda1d;DdSZX|(Me z@N>O}Z-F_u3;bNKqx>`EuLM8WtNFt$@-G5E*BiW@=aS!ppX;SoK%bf}@X2!xXG)vC z2!5_N@U1hU^C!Ru=MOILE%5Wb`W5wz<89#Qdkv4#ciRI$-%DM01GKsgeDeJ6I{G*s z{Cuyk7v5<4Dfszb$?J@D?~~w@zv7d$^UL7pdo>@QOP-&AU+9&LJs!;Q;1_!J@6z9f zhrloN`u2jE68aZ<_7fAJRSJCa-+U!>egynNujUG#OI`<`_uu$9@9zSivbTMd{9gjU z$m{qv?QH)A_(fjd4C-p#4t|kW@+|GFzY2VwpJp5z9|gb2tJ!@9beIT!krz1^K8)N3 zev#MI*+BlI!7uU}|3muN0DiI8@C(MV{Xy`Hy~uj#KQJ16p7+J*`)9!~_Uu(P8H}i4dC-U0ZjW& z@F#kMk!!*KIrtO3NHu4(2Yvh@F#lhGY#6D27jX0`uhdYrwROt&`M-S z+CR~&dEyGjdMo%mUj+SAo4}vs_5B+BhD*Vp;T__G#Fu`QT6Tni^?a z#|_|5^6L98rC)yqf0Eb!3HUkE3;rZ8_1DonC&8y|KRniSJNQR=jTI5_Q{W%v_4XYL zW(xeHJo|yM;Cu=Eqr8sypnuJ8z(2}sU2rz}9|xcJi%v%_I>A568|e5LeLoj`Fvq~p zy}Q6K^P1K|!`3f@U*@Ie+ydPm2fxf~?-PFB0zP@xK&!?=@XNf&`Av-7Ch*BK8Mz+Z z41Sqc^D}7M@E-W!lvB2S1^DG&OeU{ssIBFVe(VwEiCa3a@cH{L@ej zeudXjK$~mkfnVX(oPyqqJPbbh>!#4JW#CtM1Mk8oedEC=PdPY)7Wfrj!{z5wwjTV5 z*ScKv*e&2kyvTphU-bEUp8Gy}4s}Jqk9ZCF*o%_O!RLJiW$UH=5ifNrdda>O{D@~i zjl9>~41UCG`g1M$-vNJ$*XYADy*c1d@lqEdBaQXo^M2zg^xXr0if4UEo)Fkq64a{}lLDUdb1y!=FcjU+pzr zXF>mU;8%P0rO-C@5%8QR*1pbL$ z%@64pI(#k9^$*XdJw4!`=rt^X{`OhmpXjwei7p+u9{dy0AufEl5&RRqzOO;gns>lI z(Mx?__^=gx-Y117zXty#&vxOT_G7_6315Qu^~ZpJk~eq`eec)={z+cP_6pvMe4XU= z`c?GnSKy!IHElp$TYZnwP*o*=yK1 zoAw+H{>fhJW$3#4)4@O4OI3p3%ARJPYkrH)AJ_&y&p#HPIRSj~&qF6PJp=y9Uj6mb zud~2E*=yQMI|s*re+qWLhBhR?KgFw;doy}n@K5mu-he*vTRYDkJ&aM)ufXU174vAr zKJZWR>|3xwB~!pZ#cTcOW#oSj{8PN%dl<*oQt(gpde1_Z8!iI>RIgzHeHok${;A%; z*UqEOVjoZSYVs&s@&@?i`4eN^B=UQz*M8h*DSIvWyl;YTO%uUC)vNzcWT)>L@K5&! zzarx+_V;wJ^}aE@KLz~Ly@9vklg3`~$+I5aHSjU;Pe%_UUyUz11m*>#mUhrpl z4L9Au_$~#1hF7!VYY&<}C2Zp9>B);z6DV z?}mp<{s=zLS4f@(;MaSNN6^RCuYzCiMNVOiTE~N5@1?H7#+B57U+>wg(Hr$LKdSdy zFBnh1dcd#u+W&9~dF}(h-W#|RzH0ab_>>)ozHR*u_-A>IOVM4a4)D)n{uPB*r-6T# z*U^U_>s<~$d2VN{Q{q3I<=HvVr}a(n&+^*O4bk7(;GgA{bin7W?}AU+G0?5%GvJ?t z>@-ksA^7Lu+n>%jUJgFbZ=m-g_kw?p7fHjo~&T`P1N^=QWO_uA0}tKhG;Um2u%7l6Ia4_KsyNehdD2 zUegrl*>@fI=r-Oe!KEu`E&jtT{ zZ*T#$ZMqEn^S#zm=AJ2O|M}?KFwfrt|9o%Y7w|x90r=;`CucD(&EWI?f)d)05B>#S z$Mfht+PRkJzFoX$p17Xp`q$7W10M(f0x$9kIPISR{{nCDL6dg&gMWdSdJtc+;SumJ z@EVUi2ii^s{{nAd4EY=G0skWANA#uXPVg`CQlsJF$dTY*WQ$g3ZF2K@6&@G1Ki_KUg9!#tOKl(HS1+32~%tN+Nw&}1g~mv}Wd zM(MlwKbLq-Kf(`*l!AYW7uhB@`dIKU@lt!4yVZOSe4Z!5tBo%BP+w(yvSROZz>9YgI6*O z-O_s}_zhla0=zfy4e%Sh*1hlvzRK#JOTC5$>h1ei@GtdxFFlDo_k(|_S2GxgCR4z_ z)Uy|!3$4VyT{PFyoUH>>beB{ z%e;=c4me)~|1z(AtN0`Z;9uqqvOnDJ{Ui81ufq2A$^3}?EvHe}PVg`D8ef7AJU`5H z-_MQ!^B3TM)@!In57cnpkmsfsX^;IE@IUJfUQ(xN-p+Gm740v%8+_j11fMsY3O;2& zf*iG84?gdEDciUme4aaaMklZCxzcN$%edD(1pbv?-^NctADO>g>DdooPv1w={wuwb za%5!Sv*7c7Dn3c;1>j%l4PG=EIy?qG&*#zK`V{zJP6WScEBLd#*1z0L-|q&0me>9o z?QEX}KF>8*k-r1{SzcrYzSh7`z@LTPhp%dW2mUNC^%eNAN$`2j!QQoR1b>!S(*H^5 za6I_4y@v11fmW^H&-U!gu#W?|;Lr93&%g)h_y+j1z1Dk>saBc)^8P(^TH_+{XM6RV z;gd)l{Mlab9`t1IU%}^jeGT}N!Jp&xor7*~dIfx*hng6pIQVnChL1y&!9C#fyxRa@; z>+|4W;|6*LWSTRZ?#k_}6;955TK65+AtMYn^;G_!onJt=CveJMAmL=l!-k z-iv>Gt=GN)xn>@;ndiZk)1k>?@UQhc)-dkv;y>_y_nFlD6!_P9k<-9w?F0WhujVY| ztNm#3uk)I|{V{0%9QfBUmxLc0p9KFpui**wq%HK}{f{rAFT23M&ggGt`zr09=QZTQ|26I4&-3bUK9cqffaMBW4+oL%(2As76cy!u7-vHe2uZ}Li} zjwS!sz`w~G*mW#?+XntkUem@4Xu}oY-$X1CU#Ra3;NRp${+V_*ehhq`cYcAky$1eG zUgHDsr=CB~_ZoMgyZU5&=X)K`FcztN@aKE2CyP&Y6!_%nalxMq{(P_gx9Eq4R`BP0 z1KWydgYXY|79o#)4}(A7>-`*kuMzv(;!g0Jyxtek^L@qOv!DEU9j7KfAM7dM z@A#w*q3qvYJ)Q_0JovS43ebDoa3#0|(i=MKbE!gK)^mb!fZp5>DfAb5jG*@! z+4T$dM3dganB2u)oyi7!L)q&DUHB~kx9lptUrx@2%6{m$ofl@$zwGH^4?64W?89K6 zJ^P5tYGnrmi=Y2fpwzshcxQu%WLcZC1zq*b7aM$y) ze4{^9!2USS{IHkSE!!;T9#sEpZF~8>5cbd);@4JMvJYSGJM-Dk zsP`1>dV}9S(tG&yTBLe8*z;GxxaxH}L-u%%q+gb10naR0(JAdsCGVAQXK~&AtYaFE z{fNrkJ+5V5?@g5R4wkg-cvbp@+*g(8l6Ak*w0?HM{ZGz-h24r4_HEx4mOi<1=1=y1 zPGFr?ua7s44I?`)%u z*>)(Oc7$97-O5+eC-&}*SU0Ag%$o7YdSVYrJ?6R|>bCW7g>cuW+++3{vR;g=b7$;b zoXeR!23a5DuqLkiDf>H@!ei(O$5#4ozf3=WplOqoc}KTO^zPw)P>cIPcMh3P?HH2# zspMV_e--<#xVs^GHFxGTzKERkk-r|i%)YI0*1N&Id+6mrJ~$^XIw`9s)n0#TUbw$_ z>D%;?`^j6zK+7@6_!#zK7t{W+LeuO=-dd!j|t{V;3)&VoIoMOQnE z&||aPLs}2>TN@+kNnOM1@a9zX8~cG}Kf37hUCs2l@@)BC6zsrK{chE2(fiF`@~tk~ zATmh)5#y7^D_tk@VBSg}4v}?eotr&t65rQ@E?h*PX0SiEP2*+mxVtiV9}f1qD!mVt zbo3EA5uG;5*}*xXh@trHypXeFj&kN&g|3Z!?BUKD%gSBHvmY)K8yFWR5m-hvXR@l=%aHk0>(&L&{|_)@h6w`y7J4 zMY+#9K5J!I> z&SKXb^pDswvl5#{8+_q?_JG7^_v~+r@VQ_H`#8S&L2ZFAhwY7wz3l%O(Vh!}_T2xz z?QyYT!jFkfNo-0T_Go&ozK@!-6h3W@zp^9KuIbPS`@_DJpk2yOFP(}$XD|2K3dSR* zb=1MMlJ=QZEeEzy%P}}*de1|BBB0qJdrjCcbI4r^ZsbNy!}u~gUuY-$XY{`CZ`7!C zK@;t$M@B5p+tOb4BI5^gXAXDqS1pC++{JIz)yC&fw}L&Q^k@HX6`Uq{;7#^)=Se>L zE9Yq0(-YXRMbUirdo5Z7Uz}~km(Mo^FR^)sG9M5gs;ljvKl8o)xReX}ce2KXC#0S7 zJ3^XPO6%+4{VK?52wEA?YWQ9S_FxO$^gb5R@fp2xi2P>#r4Jm(fy0br;M+7s^*H`_ z#!yuSV|eslu^Y1AM7I^$$+Y=x^gidzT5R;bt!1EYJiiTy-o$Pr*P-D2T-W#TYhyBg z(%*RF*6g{uKd-aaFfQBBhcm>Vhi+l~KXixH!Z@KDmCg7#TubjY#_DX;79_Nd$ ziPjG&@5Qyf!I_-fIi|Lz0r!!aK{Ny8KnVh{BUF;A0tI9OpQsN)d z{%5Q*7yreKSVmmg*cyD{kS%+yIE!h7qz>QOvq|a`AB%eYD-NV_L zM?&~EVeF*%HS!(8uL+CKlBip`ne&gP%lR;TGdYJDX0I0K(Te%)hOL`LcLrxAlu295 z#m8{V`0zWNoWIIX^ej^A@*d$V8gsNo>*fBSiP{&cv>uT2{p@)g=O?!X^9VZ$9`~&( z(HUKp*?gUrYL+`ME8_@cnG-A!(0qosbi>sdxHsZ(9gnD95huX4QfRm~q+wto?KCzW;Q;G5(m zDr$4k54j>^8Tm;i;G_6A<$NLfg*G@De(3*|^&9cYrh6_Q!x{lGB4Tro;a53GfPMO$~nA(Xcfi+jZ0RcTVzSLM!glLHB0) zqWN>$PizZk=noGZNdGHzS!?Tsy1rChgM2d|_>6DOg6E+9ENw&d??VN7ljp+sj5$0t zZ4G{ZrX5!DoNU`9A9IEa^f>GC>N05uwA}x@2=DV-vHI+~jIG!nv76Wc@x_pdkhisr zepnBQe&Q@ysFT0_WU^P}SKm=Aa|mg_RhO0+gj0a7l>6DsWZuvc!j_Pa_xZ#^reT+v zk04)xerwKWp4GzdId-e~^$&#Ng>~4Ur+Fv(gZaGLioaaO9eZ1C;r)2=R+-O)eEd?; zTjCSIzXj$4w3jmziAro6_B`+@&&~LhtjqB(@F`Si1AH_i%sa#uo~+?5c6{;@1gf5h41!@TeM0rw*0%A7t9Ps#k; zUA>-i&=dWE&WBEcZ=dn^zdu|L_k@{s;|{8)t23zQ;PA6f;bnqgvlR>N}tDCvI&aoC{+88_X&@t~?|G~6YYYtEA z=KKHmXdRn7OzSdjA8!;o|MzI!>>r-i>hAv;T613w{>_1Wt?u|>TE~_hp4MGU{`Y9z zeExy7R+s;`XuTq{zyDyppx?*7{K0ymc|ZMhe)XmIrC)&8bO`-|`se>I((jam=y&D_ z`suh-q7om8-=7WiPO@EW2{Hf2b<97o*Zoq)jP#&;9zhqOgE%9MJ;~0w{KN6So_8?s z_QNy8&*1E__#Nn2Y_}_Mc7C@*>h!H1ey5S&7LRHF>)-MJ&>4nlM$mVn`?v?hoz_jf zmUze7ZCY2GZHw^VnG3du#b;-ZLc4UEz}M$5cu#%WZzW#p!28-R1oZ!`KL4TT6yVBl zOh;NM*Q2EG*wG)lWjhYg&sp6Z*q5%X{}F)AlqCwFwxU(t26CqnzC82BDR zj6UcudOGOu&&*0#@+IB#E zQT%?hqHaXrn@99reF}ZT9Ajm+uRn6jlY&VZ{GEzgnFEiAF*axVs??s`Y2=Ibv8v0sp<9?+LG6ApFt% zj__KL7vH90O~zi<{WzdAYZ%;<=oYr{`*Os8B*qL)gWuMwdqsFRD4TqO_t?}j;b+Z@ z!q38++K$QZSTGOs!}yGacV+qXqu{ZIY-D&f_T5BXi_Eoh<986B;u<^9{xP@l)@U%v9s&=5Wp-zKK|cenkS zxzC#cZr$@zpDVx7j@}S#@r5OC|L#X$XYTa6$hxLcWe@YhB)UOjN-a88A!*3wiF%G$ zz7<+#d9Qh6f7p7-4Oz57^b_lON&HWxb&)=cmZ|^Qzun&!#@-0}R;>Mk-zO@&xdVo| zQCuvULk>voRx?OQ7#II5xTpKUm@xrLO!oPvT_raKB}Ku}(X! zG%DYpoDqB{J|%vu=sq1QXTGN6^S=H)6aAZ1l1`rw&{J;NWJ7-YTy&M_)%fhK^aq)_ zqwN5F#Qb7dCw+JxmU+N_e`lnA%i@&=?R!u3bRv>uo=dywzpT~i-*o?^^zn%^vSZ~| zw-6h;3;vsIn)T3%xn8`tw>W;3T|)c@{hrY+b`R&x|5uS4k_!i!k;%_KqOm385fg^Aj>=34WJB>??F*+*yasiy5o5 zoT|SN)0^m%7RXy2`#WNWtY>8AGSgU>Bc?Q&IMQS@$Yb?s9?wbkIrcnh6XQVsSz6!z zAoKm31a?{KWQ@m}mE@uSL7mNiB!)6p`Wv6vm#=M4C2hBpFA`^APJBUz4$XUfdy&3d zn0P==P^Yy+@<<;u^=$2=te>P!LH}P0+BDprbSB>p&2$M$1t$l^vpkzt>4%*@+%i=4u92dtwaEBuZh z_s~_>5)-@7bf;X!_}yr_6)nUG?-E@=?EVq$Kg5^Y6SDS|J08mP?-wTrxzBciA?Hb* zRWXKj-4^e177zK07pwk~oPE;%_#fKKqf6UktpAU5#!pvKyIsdhe-W73*au7&BR;r)uOT%Fl+i~=g5z7 zcf@+bLEq~5e_L46;NwjEU$3#Lu*CnJ!sYmVGmLot4_L#W!Ed#k$9*$}8cWCj;cLB4 zBI^cP=f=J#^~su0d^vYIqvzAs7maM+&GteSf9+}3E1r(&evkSZzwNx7^S7gde$U!e z=_%3>GFZ3K`YnvV6~^De`TboDoVK z*Dd~DW{tUQ7$@M@I?ge+={}3>IH}~n$yj9M$p35;1#ju z0q@6-l(lc}OoJ~ga~!dED)4<-S9(?adT5*@>Efrls=|mjZeskg8I!h#%}vY))+1+? ztjSr2S-<67Mqhn<*fua;!MoVE&;{K2R2$Hix@2sz8wTTKP@mp=!We|amPs5?>nFQ6 zPu~TIe8`#KPSF!7dz{>VoIn-=U4Tv1wj{B(Gr8h^?s_kEBU@Ex4{H_4x+i7+(Ye5R z%TG@KlUvSnCF>T+$_DWdrLLf!`lI#T_Sh#U1zuo(^CkW8cK4GjB#riJn=5ym_=|0H zTrf`x#;xuspK&HeEOsXQTfyVrcl`d=y0y~w;->#!tXpdx)%Dm1trcf^MR-xUhZKX)M)|A+jx zW*wWEGc23X4fz|Mmk#@F3GpjGIXlbS*>-6=Yp2+sQj_(4>f?8C4!@!o-ynrtriS{L zg!jq0e0&GyCCCRlMvqJ2JG~g}?-Bj9{(!ovE0`0H@L{ztv>bT^L;Plu%Zz^ch3NW` z7$eFb5{qR$89QE!9ltR6o!*rE9+Fa>dD!ly?{Ei_*lyO>KfLW8n_h(NUKlRS+HSe4 z(ZBB`+6sM=+?BG-$~UL>@OKhlD>>Akn+ILQpM)N==OCa*ueP7bldzwe`fa(VmbK06 ze~I1uWlU_Sziio%(3iW>0vr1B`iu>IoINe;iO=U1rWdV`^?y6eU6;y?=0A?kI)}Xu zm7}#y%|8d5T8T}KWNhl=O6PA4znP_@loMO$TXprC-eGAcb2#13=I^`e9zEvF|Be$o z0pA?pYr+4A+%=oAUFCX@q>e3geR+gU<2|-PzmI)M-b?+gH${TE8a7noPW$&=mWlr_ z`!0iaCL=PR3(BhphRfT@Dw$(u_J_@XUtN1xTiL_hIcqDMH^0BFv_ASjVk-lAJa$+f zg&z7{bJgEtD-V&=Meri>;?u`K{<3nT?swNN;vKTn{I}&VtBds7AXp#zj+dYhNBv!Q zyy!BqBmR%w@v_9q6@8-TBI8(#e|u$!`5?b@&3Dh6L;j9E{Ps1z5iw2HHsO8vPhz6P z0A&46{C&ya|LV$j{V=*MQ>K4{g}yPMX}8#UW4{gR`V+AU>N5_1-%FXEKTQ_?l(p>- zyzfQlRh1cDKH&bEXsSoWujx3jZ@0GoeSMR8hVC1`L-nEhrkJb#t-duoAHHv~Qpqd+ z6#l9nBgTR_T=M@R@66+?s;%&&ETU z&u;0b?T1k#bc^5faT{LJp6)p%WkhMq7SH1k68D+i#zMt2@lUhhvi$7P@J#44oA#=( zZvG3U(5$qZx{fNp%Nae0OtS19@c)Z@=Fi~A=FjY#f+u)co}%&hEWaqZOEu&P zuM!)e_^UU&?KWQacb4~-(1?`5H>f@ZhwPuD#|_8Eq1(P?whUq8OP4S;O%A=`!pmz0t@^fU8#Y&eshJROU z*>R=I9Q^rH^yN0C%e3O_)!P3_N0)Kd0`MdEp2O$1Y1wXcLiibdNe&#ue@FSVMl63; zH?(`~nB~tZe`909W`IAd$M$ChH{#DKarfXu<@lz?<;(U+KIQj@KkMUN{;Vp`TV4LF z31z5!PTi`E5aTMc-U@pi)Cy#r8Do)=9r^G~y%)VHJ4gE3re)((FY{jY^^o+{>k1sA zuM55S?!u#~58D_1xRTE9>mli@q@%A3`KBZ30{7C_+1s%pdP&=rFWV>i?7rShUuPeZ zH2CgH9{L)WC%%kqUsoAhR2kSRhPP_Q1CH%x1h$)2x9oQY9sgZ#r|$fpLB7YCy;at3 zg^wO}X0bskJxKCtN>}`elrOd#TbI6~n~s|;_E%$wt^ZCwGw$+14m~+K!2hmpqW!p2 z7J`4sxHGqvEuy<_(y~E(0G+l8%~*1i*2ke0!BhNP$F>aLMz^xh;~0W_bTR|m6Zk&2 z-?AmEzx+SY|5_dWk2aq{zmC7FoDXuoc_BPs`Vi#}csU0ne!Z5wh#ik_0{HQZQfUgc z=rtp-gJ7StWGJ=1i4M{|U+6UYiaWf=?N@7`I^%*}8=A3Y&J|JCMa3J$UMk_HMMJ{B zoO4BTrpUQ-xl6AL{a)l3@h_KiF^oYs`b0NSKGWFVI(1}wU-B+{y-_w4X%}nm{nBTP zenYa4EbFuuz}L_jTNzht?KsAE;r^qnKW!UD~JC^-o zfBb$i-_C;f+Vu2dOPOwn-WFbSj~6>8I%=u4Uwqj1t;3EfYr2Fxd$-}cw_zim1fPND zh;0*`TYiKIXH%@Po*vJmtnqKY8l1Y}Rh{-`@TzRdvY)E@g5Prw`;L(_`>nJ8(A96j zPt?=4NXZ6j{6gy6E5!?ub8}YxLe7kdJQTjytBJoR-%4EP(1Pr>i7YDPBd@g&S9az; zoMr30UFMl>_gwV_X`glIM);~4=MilW3H^tk--iF92icgv(;rU{xJA|rB}d`WmM$m&2So#<69(MMHA2!f0EPbq0eBjyZWB<~B$gB1Q2OV-*`-7Sh?stf> zhCj$&nKeE|0qoUQ`S@L0vH-tYr!HZo3n5$dQ*)H_iVw+rW(*bIqHmTBdNMp`GW_R? z5$F_!T42B`^__)4hEL}^lzQ-;cYyb4yOvg0M^`PJ9h}Vhtbzgf0(efcU;e2@+uN#k zF^2g2EJ4R|_T;xJzI4oZjPIMSRPx=dqu<9qJzB|k#|no>TSxE>9c^XU2eX6BRq$FmB}lqM|2~6{|h&%-xy~Af=k3YjWzmg4k#2U!(Si2gQr?%R8|}TG>8ANzd?kA)woB1Xs+&D^i*6Ln zAR8&VfnFHXv(QR&`&s(`Cha}LS6k+fqLm>It%N*6GxBY&7QWRby07}KjM&MB{ks+@ z8o)Q<``h24c>vz;b)9(*1z!v`?%Wa1T>M|4ugwYc^>BCk+U@KaJ3ava0Dn3wef^)a z;P?4|GJWm)JLzlBS?KHOe=>dj_ALE>^8W#S<^0p>>#&mZZ%m-Ct}_6Ne|6H=b2k67 zY_-@EmAw3tlo9GDXM&*pPJ5LlCwS_=G%r(5k<$-ezc2$-oKqKC^;)yX`rMZX|YeWj95ZvwS1bnKbO9$m%U4R_F%jRa-bu z`ae0dDms6xuvrTpL#G(xQRh~p1^uKx*4xhd=>H1VrKiw`O8-Y^S4Hj$zQx!Kkv?HJ z(*!4zC?DKzwB{^2UN>8_ti!gv_?FOxGe(?!wb#1l_Z@mU!;d7a?yeBtgw`WEa46e9Ecv4YCl)WlqPnAVOhG^qHSI8dKo`uJ4#pfhy!wOg25QJ zj3{LsbxrPH;2W&S!+T_oD4ncjcxgBPAd6>~Ef?L2dsS|dU;ImNiF)#|2YhJT19qnh z?yWX8f5#r5Gw>+(H^JeTzQ;h>*|c^4xIM6W;<@aB$m8d}ze34S+NA$4{D72>7g~NU zTr)S6zApSr*}vIivc_B+Zs8gGcMO^e_B8MQZhEow)FtQY zgV;#V-jC*te*(Q^{eMI+v(JU=v*THV$5{I%r0KTi{lD2~Zw@Hg<7_?z79TiI_*%C4 z1wI5S?QYZNf!+Eheow3)-F*oD_x&UI{x9;+Ir|n$`|^F$l)nMv)+r;2|4OIt3hQ2Y zFM9K~$;z(S{o6#WUBWZ0_3UHTBe6r_FXm<~S`SZ={X}dkYu#$^-nt)5_CcIHyZ<|! zZrMC#-6Ab_y$LT;`;hFf%i5^1rZGlpk3{*sDmjaFP3C>Kz0Kl6c$KGhfk7TKg8;LXqw<#Y^@T9k2>wZ zF5_K_fBNoF@c3T-Ud26Wd?(PelW*^Fp3kc_$5w3*#dZQOWM5;5SBvrOP?0-=-c6y{ zu{LKPPK}Gzx5roQlJ>1?y-j`ttIO8PSx9vsn(9Z$*%vyIozurJzQ6%w+o(@u8~Oh7 zCUA^x*T;Q0{ae|SZqs9{UemUu9Xc)F@RPG8vTqb!dQ6M@HKYCgou{JyIuCvlpEC~r zVC%6^`0Z^j)fR8roia{QuSsA1j{H)G+~EgLNrFq&##LoMki51}gQ82~|C#MG{*Lx7 z{DSs*?0Igr5Bc>>{Am{cW|e8@#N7uD?&g0<+@UX>6L-y@{gc}U-o9+xc7NmCZQK2! zwC!x`e$-p1{J@mFePpLAaL;f>8`$SJ%J*``ro9L~thf+5^|X1=AI=YWc6-A2ZsmR% z71jpb4lQm{f0q$|p8fY*@QfkyH!`;#=zm-b&l7(em2L!Kg9A<8ba>35z|sNej$VuR zSaZctd$z)h@)Qr4E4pPs{692nO`x94Y`2d82L1!g6(uvbHr*F&-KPBPG1N0>Uh-|h zM`4S5GwIM@N$11|?sek}u~(Nh(3p%5)xDGS=%KyLIrc2~(w6&H>VY}?^x*2Z*emhj z+q4;%{0Z)Y*Lt}5*K>TY4w(K1tXTR_XxCj5@HZ5B} zsBO{UXQT^wH=!5tdcd`k>2|-E?O9J>a*0bv} z!UMf!nZno9nxe*0dsb*s&RF6H$Nra$DY#yRPH2cu*dpu38GEihonex5MA>q`g;&Ei z{}grQ;S=p;+mQilyBN6a?3ZI*5!Uu+1HGwv{o3~lh{+iA3R4#pF{uO_H0MX_PuHkk~MXJx&xHGT%+wd z>felgm^(t*4{q6Zdk6Q2c5qh+-=vN}|ApZH0rbH#_H8&*#o8(JLgtse!mrgCZq~t; zZOP>Q>fe`_@1n~dtK3a0b;YPlY}MeJvaR#1%&FAqZMWewn0%Uky4w3De?%L6a%UIw z%PVqXbRcCZy0N_re8VPii)^vJfNyHw6NhWYYCEifqlIRnF)bjR0H_CW9%b{iKyt4D7d ztnEtf!yX;y*peS{#W)idXyTq8KYeE3Cw%Gw`PIVBN%&D%_t>?pVyw4&Peu0*fF2G) zx5x3V@6TB>?`itQIWEdgLtntdf|6 zl!;GHV0EXx!<2b|-vRZd2(HiAH#084ZgfGZi?e5Ee2bj3XEK-7zM7H!EIfdE;O7Ca z`yVfhb0zeX`Mp`j-)Q+-67|xL(YNW@xeus&g|oFP!|GFN4}H=C?SniY#gcwfD);fq zISIz5w~>=7^HJp!dmm@JPvc*9H0ojhcF^Nm;NTD~x|a9#A<*7#`oegpLVtGM#;7EC zMt^k=a9B&h-#WDuuTFV_OU}yt*V)?^N|H3R@7~S8E1|POPhwpGcR#)l?KvI1XuVE-M|vzP)AOd>t1R{@!CSWWYvhf;yb*woga5jb zeCNNx*!5^r+U4tmZI1aM{`j}SzhypX$6YPk!2xt6KKjyL%bykc*$Dqz<8~QapaF^R zqJeHUuufZnoE@^}cF*z1u4ii-bGhq2YT6}ywS{}Xf{U1E;t#%(w)%ZTxRNvUQr+@t7lez!<<9+!l(pMxa~18~y!{(gVH|9bwJq$8RIu zFetPBozXW(E>wjP~bi`f;BaqAMI)cTWC$4z2ht%`xNMqt1bDe z^KOEV)fu?&(Eo1sgaBh`>}W-{p^TBxhnsw@jH@l1y`v%jZd$2j-?~-Xa;xIsJ?Z(~ z>@V47R*(0>;@6|>(k;U|uRM%)k191y$`L>L-`@BQO9-MQoM0|GNX=V%_A4nbG-o2SRbn3uYT;U(wf@9l9@mULxE8rm> z?v7P_-`i4l7ilfupO)dJl!Xow!GB%$M%wo1fhKU?51emXsdG+W@51>AzSn{+igIKw zv3Ju$nnIOE;zf6rc@r#ng!&YHo@?#shHs&L(M4KvCh5iwcnD>Q4JGQCWwoJI=V>qa(m3+<1l$Xqq?$#k=xSE%`7$!+OE59hpdvE@SKI?8Y1jtFB6 zb8?K@!}lthK}O))D69Y))nHI&6&WB?_el0Qp z?Mf5-pF_j#13Vvv->b@swO+@5bqYGnk2QnwXPrD1o-O`u&F6;){dg$yr7L{uhgz`p zBHi#v{L#fmJhMIBb2!lSd0KnwJ)av_Zgv@E=)%i> zfqh`G*fU7GiFWgCT93}SMd){m$QP$tNGoxHJLp$s6SD0l>=BQ;g1v4mjd_|%gN4Y% z%P>p|j=|7MFITqbyGB^+)w`t({v6kqK(Eg`qIZ7Y5lBUjCT)ANN4{Nu zNXfi!|L9MFgTFz3Hnn!m^LpT5vL3vM`cp2F_WVcKpW+JN{9|xK7iR@H)uzf-^@1KmYK&0I$LyxTj{IvTdLn z*>`E47Tbo3^OgOgOW$FQl5-B4vSXFRrFpP>8hEKn6DpE4)}9{pVz0p&YVCezIy~c? z>#VUIUcR*q-r&^*7g0~0#TSOzd;uL%);{`w)^*BRo5W8q;9;%url$vz@NZN;Iogv( z*$TP8#UIWr^aYYPv0hvB$S?Hxlm;y-TYh$qtkpt~rHUuD_hUXC`xJUaZkv>)8)fty>iO;brQ7ig?a3D7xAG zG%TSEcB^v)wCQi`$#|pOXOcZk+MJ%AJ^W=Y{C1nW#qUW+ zFZ>L?o*up|(`fO__d$-Pg{NiehX1X!sERwB7T)8>Ci_yF!aMj-d-MLikIH%vuO^PY zG8q%>bj2lE=$dP2yRHYHIHtv(IH&~|XX=8laH`)OK61>ycjZI+4lajnc6Xk$7{1x9 z@R8$$DIB?@tY!GFy1|XxriI@N9s`~{>eq6@r;d{k+$NM2g(i?G+~CTU%^r&@!ISz{BN zQ${HLI-Td?wyzKjR|j4dkFA5vE>VH z)gFV)W$#n2?)5Y;LEl0a+?`}>o65P{B-WKS##X1FmYu>7{dNShxZ_LsKl$DU-&e5k zo6r}0qV%z|>L84-rE56r8#brFoHFKZ`p5u#li|t}e3up(#<$tE zD`VHo(be}g73Wf}-~ZiRnb?cgJaI+T#aWUdJk_{--LCdyo@mR*X#splgN4Uje1}Mj z_4XLC-hVC){H(Vgm_JSrrk!s@=bz8tX?oz6zupr2!F*Tj`=?8TY3+K;)#q!`pAOZd zf9|atSEsT6exf7R`xU+A#i3fu3%#M8y&c(U?{sX@PUzX%t2*B+>1coNnZE^mdEW5N zJKTW`5Br8A^<5dXZS}4zg1!^3z?=*{>I->e{2lZh3-R3y^cK>2-|pB|485+tVqLIx z2R6I@YTqy5|2p5o+s_`|No=$CgG2b74_W=@w-mn%_=xxIBiv(TYdeI$8}cm|o#0Dlba<*y?@SmgaY~?B*TBTlu5DIv3#~oA>SsAdA3fY#I(N5xIx)F=V|~ z{tECv;X#)Edih&MjtBm8yflVB!`)?}z+`+EW*^rr*_CmG|JwU{Z;CBe)_}PDVq-q% z+|KSn|5e`-x~B~smua!cF0m<$49tP;H`rnA2+b4I>3q;O!0ydGK|EHd?&x6p`r{}>9~ z=T&1H^j&X68PmWVpB}jWom*n7R~xZa$3wx@?=yxO@c9AQTD`h)g%A4q>~w6^>wE_d zo9tfNb^CMB&wriXqJ75L{)ZMT`kF4^x(THGTZi_vq{g>%{}0 zckj+C;P34BLOb4&mwjt!sjZWiqPM@-Vfh12X6(1Kr)`hD_bzPQv-K^_dl~!fmdxo9 zT4D{k{ZsahiEo`Hx~?I23_7$V1LDscRxwD6$g&&&F0C$F_tG?cgjuocT6mcocq7H%4?;W5*Tnxj9N+5g8^hAV=gIc&L{%nb_%P z@6@7vLoeoil{LicX0DErc@;hajeGgqr)g^Z*^jWt{pIkQovxsNr)Er{kE@Y879Rsw zvbVVFw5-K}W1RiOJ_x>)Z_@%N7iaPZePHYE;5kIircMxgk&y* zOXULRp+wN zS?J$8&AUIc%e8bBTYhJKmHb`u0&6sShx9RCKeEp}pG!CCY`^lS2MHnr3vd8jE`Ilr5U(xN3+yM4)%hn2yVeeOLqPsjD zrvtYi`|Ga$$;r{%w{0>mY()<8(3VHh_sc|Qh2Kt6dY`&$*i+`0xe)EONh@w`ZVqq< zyztwghdEm&ci%=j#NL>#{et|Z*reO|U7?HpDw@(u?BJP!V}DEIY{G!>vLAZXy%l$| z|KVouf8~W42KKu!-%fGzvQDV{E%>8K8RYL5^fs2pS{wED0gZo?Jv#i%{?=ao!_R`A z9}>QvwWV1L*SERCt{?Uh-W^J+>O%YKITGW}jx{!k_lf(PL|-=+S-1S10%u z=#;q%4oo?TUg+0j@_o<~tM%}`KIC4`dK}$*3S7B@t7#AGYB+h9VYLVUNa|@nwfAJ$ zzug^MMLn#u@Iv|`?QK(j6;UrfoU88DqiYE}ne$<6)d75Vu($So{6iVbz@6AD+5Z+C zwx@fzL;h#~9hL7i%iSP0j@#E=_+JWV8ay9f1~2_W{}b%sJ>SQBmi={gUSl${^l%S* zk!9ANwdQrVY=73i1G|iG(}$?vvTI`JXHKiO=tkU~vn`{Z5ZIzSR@rO0n` zr`he&e{6u;p2aRb6Z?Oe^1}^q9+z|P=`#PLp28GpF+F^*><_VLyN$iu?asbk6MJ%b z%J!>l%mX~fr7Zb-OG*ViYpQN+zYY63yp}a8>R~Sf+f2*0B;DAHU&(gHU<_BTIh?_|Gku( z)79@mp10$1=j8EL zJ6rJwko^MM*w52f-BE=6jh`Sq^Eo{#dy|}x3l>f1{9|%z7rkk{!t0ai!|m+3e>INY zJnR=*IK$SEs>-13Ey%~*TdEs5x62-x*k>5y4_OzXwGqkeGf@^kb;d~UNF8}Qyzx0j zOJaM<_CssfM6)k|)<%jvfwRy}NZH$> zo?|I3w9D#;(9Hlf=HzGnX1pm+{MMvQ*-OZFb8Y||dA2#zncHXOe~f|Sch^ZD&fS{| z|E!ZOW%w|O-X&wee3$Ztreo~mA|taWxSlpx`^R#ZjkEWr_K(Y$%g+9>?E}&^N38v0 zDOYHidH1Q~C(@OsYya5l+g3&24(+wDUu}%iJ8AIC(G+|z89vC1pIu)^W;lb7rF-4t zXLIJfE9{zgQbsy9qJ((|zf0|z-<4VW)#Q^tQ-8AJcfebG$Px~}OQgZG@jK+(FQh@* zb_NZyt|%JBSMgjlDEfA`YZB|km!~E5EgWVUg^~sPl2F zQoGqBUQzeBOk_M0WcsHp9{!fdpl!p2hs&JmF4LFwQ8Jz93uJn0pKM&uy2F>Mr|*}q zr#bf@ucx*Dm#;?~X4j+6Umzd*na}=gGb_pRp};0{9D4?Zq_^Q{~CUyYk zgve1|_Qe!#nx8^WO=YeRRq^Pu>{HoiV6?6?9NvWUFTFi(Isd}mg3-&sw~3O{_v4OK*(FSr@)?mG2U3Nl$%}c`Wlb;G9KLdUx|)MQdKx z1|NFHiG3ZhTX%%Q@6H+!TQw^bcr{1vni~*3R>Zhy=sx?fJsl4P{Ok$&*+079e=52^ zQww_fv;UL60DN zKh$f{*A{EBcl+wGlTTp(-q#Ua{VsQm`A)@}_F)%W&3@uO&M@r6HhB=6r$-kXq^ir7 zH=})-JE{1G`ei);cdy*42L>=U=zr0VPo}|J^kCsDdhmrdEpX{jEm#A8YW1@&_I9_t zfPC{pfBG>3J6@aKzOm+1`0e|9hs!hi$Tv8`slBz9tE60P>b*~Qv~RdsbV&RZ{960n zZKuLszdzRM(_=-N9$WP)XLMZ1LwtjJANorMI_q=%vhNx6z8wnBmhXA*Ho~iRdIPVn zE;aT;Z>tBOJD>1H?_Gr-u2)y-rXi1GV~y?Ig-!S+bk$e6-(c6Lfu`;@yFioD^}6H| z;TH*MEZ$T$*q&FW>~-3E@ap`H9iA1XKbHQ{yiw+x%I7W1l77bR-L03ns7G^!m*Q6e zuGKhrkNSjHg_nZgR?dhqkE85q@C`$kln-vF3ond%b7rYu-+)Ef7U1ni`>pQVqzV$9PisE8?kbLj-5BlE1Uh$3=TllILdwVB7d*p9D zRvPorNAK~c)HzTOX;+W9)=E3_TJe=GK5>ftbN}`7!aOvhjyZqI~WH(2m$Eto;(9L+quNJ(6|h zDY5AYFV#t}^!r%xOIo0W{f`saeAoJt!!Ga8@C}ECMql&lv0eMM!2S$HkKrTx`DGqv zG7tZ-8oz_5HQ|%tBmAz0FKvK_z3bPbf4HKDIOaA!3ei7|>>(~wi@r+zyY^|(ef++I z?FRcz_@};1Z0|aJ?sV*K&i}pS9~8_uL3>Vg1YTjT&V@HF^5HkQJ2T3FhTU(c2TR_z z@~-!#N9RiW-?iHBL#93QZbJLtwA;_`8SPJu%hh7EKkypuA5S??_r^rL327kr&)hnvjYeVWxmA`|p9dyOKuesonA>vcQ>4#Edhu9ZdwU@BAkkEzrSp?Q# zn=8sxdw^n>Bfp<=Su;?K&N6?Oz&v7aCkeIlTC6ollVdDrBNsB4hzt59&RZJ2NA||7xL9PT z7Ca>7lNVe>2e2>4-dt?a3Gls_`7CzM^Zyq1QU>%zfACp3$ayJi?7{g78RJ043Ft9H zkKTP;-{seuRljA70`!|PQvC)G*7&}y#THqN>Jm;l+{gb+t{64dWW>^2dzN3r{F1DF{~NFI*TdDasoc zDITA{V0^*28?IZrWL#Z+BwV|sjygzPA0Ag#JGQ>z{N@isfeQLX%P#H7+(wq`^xns%mJm_E373hU>Cc#LIG} zZ3Rbrc#rV9vrNt84e`$7UBJU2Q!bm{D~@WLnjds>T_S?>0qh!jZ2vH8f7CSQ?q8PMQL z`X>=&q^7Zcd0lN)O{1d6hUE>?iiUAZB1>xPm&-^)mwmIe#r%%t#f<;YnhR&EdMOif zp;Y~tU2isZPUihP@bkZnoy8T^jTUa^1hTY+w2fn1T5nzl&g1WyydXAGUsF+SstG#L zq|=dl2Dz!GK2i~0T(O`!V#?ff@|BTCaP0K;8l>c&J`s4>f72sSNf>qeOx+hvMZ zohmjv+c1JKY17=iu6cC-h`)=@{+IEn*q`>ZepwnUS395gQeMq%YBTGXPp+?BGNZaG z98tWF;7{nA!;{z254&;oO*J)<`f=CS)?YWSo|zW+Uv<@j`ilDH#?8C1-6^)INC3THvW35?PwX~`-VlG&2-Vmv;{W}KaB<++(=JlGA z&UXG!*N(Hzmri0lLVtu7hw%y?&oX%RkwsMv%zA49s;P`D8yl{#XpA(Bt*RYUv@pN8 za{TxO3o7yp^YZc+j;pS?Vfp-qMpno0nEbH?WAp56)m1f-`4VZ(gLwn8v?}Tx%A5Yr zs$0gX5l-GPCU0#1__6t_>P7XnO?3;F+f~0ty~3Me`y?mIud-uP6x@1s8-X3nL3lf(!D-S`MzRh6|h<5i2GGC_jwGTa`o z&!3c>lG;nwvbu~c?HYc6&s!1)Kf&J@#ler-@mI5Om{m0(TmD#F(O@DjEUl_-YN%dr zE{H^GOc-?oivW`)H8V@QfP6q>8mm~(t7@tmzBZE5I&mf z8>*H@s+WhzFKu$j`b(@iUw*nZG*&9aG%T+PkE^9K7LELZI)yIp;T_LAtztQ1lbYR2 zBVn_ufmv5;RwGzNMw!#G(mZY;OOyNPCA{`g=)VNr3(gbIc?vQVpT zFlmuBXY2U;OVP$BVYP(4%kF@8ejiz>B12Q4;soyuXDL*u| zHM|>tY-$Y7bL2?V>IKwW(P&Og z=J<=2IXFv0ozzTzWqljVFVkDg<5%j1?jsXTmId?rD&*GkZ_Ju8bN*$emtQ&a8>N?* zU6Nl8;ViAHudP`EOGTbS{+DG~vHXU*YGzJ_xuAkJ)K`QfR5+7zucF*(;CTqYE2&KQ zTs%$=FGHTY-qfDF2RS$nS8ITu1eW&7+BNg%-Ema#kf|kib#Wma&+75Si51n?S1fOs zU$FoYGk4TzQ~e>MDL9a}$m1T8rRDQ$ldSAz&~ok5vB!GNX3lpR>&0c$~?65 zhAWyHKyyuP%@`z4=G9rUX)DPmymnzlBZ3WhRt(4%a4ZE%kZEzGMp_|sh_o*%ib=jF z$zRB?GhRKGQ-8gXfhqsdC>WS|eLWnmW>K={J}*lfNB*l3PRpSyMZ2iSw(fcHENMN{hEWM4JXu zXM+d2b$|OMxVP=1^-)WIjkcx`si}7J;4CLJtd?7A}m`&n2zUaR%?oIJ|7wW@?MK zK(AX(O;!w%h3c(g(>9PNjr6&^m)9b2g@qe`BeGCvCO)7c(m18Ip>bB1e0x=-QDn2Y zkgoKlLfnx`xPcvJvF@ogsM~hFNwwG4TvlIuU8H7uRb8aCTKK~9vSo-c4RdOnsw*!O z5)ocMsfzWj5v^rvL)YJ(futxyuv`8OvR_?Oy?nCh;L973_PYL>R$E&)1DbZKmY69O zHI>y7n?+BpscUMq|DFW(&k@{SgLF89dLgsPP1V&@G$RtZPFPA;$zN}(ZLBC;7LG(J zBb5?7v$l4cEOf~CwN3Tm$Yo6pbc*%4(a9(wm)F;_@HI?A3Sb_S=W7);%coV}_G)-0MTnnrz79q66aMKH5!9HqOgb|HNC>V;oZn%>n=W&Nz0 zFmm9c+IkiuWDJ=XBFl+vEMqTkUmKRWBzlU(iyc6ClF+U5EAf&~(hE%v;FT~*E9FXF z`CDG0Ly41D(o4ML5m@RB@H%Ow4*8pDqUt*dAH0I~^fBnOjrRa=JMS@G@A+9;U*0*y z59T+AH;?xc-Ya-#@|N>{m$!xYF5VryF%I|32 z65cC#ui=gG*71IicMb2IysyEB93HjjK~sAjSo$Vm8}4Hrz1Lbd66bt8e@PwokMWlh z@(F)&^8cg!Wf|oN&;K&~ixj-Ae^%*bxH>lh29?_PH3G*A$KV2T4kgW$+H0)TEwiyF2p1peRhdt zA#4NLlr^rx#QL!S?V_uSvB}R<{#?qR^s}zDO5})m`1RYs-DYGg(#V_?+NxZG{f+R~ zz^Q}hcpe`g9*_T8GzQBW+Rzjh`GNM;qkbR{Auq|Y4nBrkve%ba3OaT0aHP7rQ!Cg_ zIbWfz|IT|EZ>g$Kt?V+6>pShMAR3^|I6o0+j@XRTtx?TB0cP zi5({YTQWiO{b#P@mi#jg5~!$_!EYRqrEC$$$uo#Ik%sK_*4p2-&@PH#hJb%!+o{3| z2*oN9cIu>w=7OrmhB|~vES`&zvY>{isH2#&xAJ=)zZ)4a;cb@P&BO*rYm~yn9KZ%4 zvawZFvX-8crS&K62!3Tgc8dmf;wKR=WhS;?6;4MhiO(c{fo{=wcRBgXTCNgHw**Zw z96oKAe~dbWulFeD*;rD@?~?T~cvjZe)+KB2Q%3M?dAqbi3pEqX>mms64Ys_484aDI;6~EmbvQn}=B}tggMDatd-S9+b(i@ZK!Smo+j@$A-F< zdHKtj6t%UxO>$fPS;yaJwnvnEnJw@F>Kw>#EuA0FZ{9K|b?2O?^W$oomRRWzk$y1g zs(5AX&%@A^H$E?zSCChjSCm(rSCTg&KQBK&e|&y0zaYObzbL;rza)Rc_`LD?Q3>F28gC)TU1$hPe1>*~X1qB6#1w{qL1tkR& z3iAr{3&$4*3kwPh3yTVi3rh+o6y+7=7mY6p78Mi~78Mm07nKxED9$U+FCJeUEG{T6 zEG{Z8E-opaP?A@YUoyTVSW-|@SW;9{TvAdpVFFE@K=l(SdIH%d5R|%y@%w^zH1Q>I zX(q+}{Y81dZ2Yty$}A`B`DeOl?ZCUN4gZBM`cc=|b{j2+yHz(tR$gF@S7DOH4;^?c z@G!>jvRX8|>%V53aw;qdorPOMBb5`)KagMM|3u#R`CA_Og~5*c(Azd8K+kp)F&eF)gguhSOE+D(c{ z$p1R&MJ{&IpD}A##2gJXb+k1GNpx~Fc{&w+Wfke-@ttGHA|(3?D2wWMekJM(({Bpp zw7iV5Q~H&4hLQZeP@p_`|L3M!@_{m$mE zUtOE^jh{TZ`5W4c6*D3)Z=Rw3F>9uF_>EZ)zgaQo{Ucf5eCgfI-!!!kzIjx?DD<$pnEPfF7{uLshh=QaQof5 z;Y)U%r%#mZZa+zqU4wL&Yl7}}xm_;9(1*GVJw;${noB z<>`8HZ=D)FDf;jveW6?D&JdStpv!HfyL<7cS5MQyy>XsvDE~q(-RIX`DM|Vm%4>2B z)0Y}X+F2qdaA1+DcSAP=Np1bkfQ&DJ3sm>%TsJmZ(nWC&In zD@muj{)@JG`5o+<<(H7}2tJ677!0aMOVVA(7SXYJy4%{BU-{l+XUXKg3 zd%R!otq<_%X_VSWmFTI|H<9NOHyH3O@oDAFM>TEu+osGg#iyqKnLYbubz!)6w9t-M5eUmG!0AZi@q3>8;XK z$>>>)rotABgaWjJe2ce!mEU+7xRXCdM2xaFCKi)s5cL%B3SXbsbfe~kEdb8u9Xl2| zhjg+o{T*w}87$pl%XKI$%G3i-{tM-fpj>G~5w8P_Zh0ZE2Bk7TT^^s$<@YDKl07M| z-tKfrt*_(5_9%C#t^l@XGZ#~b* zPaEPMo;1{Rp=Xl2_XW)ldWXA*yL0^oDOX*-qBv!_$1nf}vCV$<5oZ9aff-?Clkp=uIvf?apZa z^~IGlQl}&(Pc9og#XqChR9|xQ@yW^O8COg#HhTM$y%T)ND~bmCE;5G9*3-uKYWeZP zrj+JAw@(ZATA7zV;0F)hdd22n-#Wo}fqR}eCwX#mt|xHoBj1W#>7L;06B3fR@1%d_ zp$n3J{?3YEntqDWoi9aPCwu4Z9aIR=h7^_Zj3R=?OG8!zt2REzT%||ZhgD?#HeX**mO&uNz*QA ze)?js?w;itT;N*Kd$hYUb#`*|!zJhS8tqQf7J4tyN}V!xZXYAo9fonQr#tV zF4sTosueR+&!a6x{@x@_@-_e4h-8i;vcP)q>hpR1zN9|MLsAB&4(gTOJ2lOnZuI4R z&j3Bcov9Br2Kff-LtN(%FpUe1F)3s9JR{#VUf{$<(n zJMR2>-kiC2tX((cPrcKwoc7tNvE#ln@7wd=TzTjB@4EYeM}PCLZF`@6?$1Zw>d@SZ zpo=G7bjj4OetYHjiG1ug|GM|N7hXK_mext`7YV&zTNzn-*N=bl>N9HMMP*ax zd~4pd^D85F-t_=k+MfN(k++Wa>QgqgGSa;AS5N-#_Xl4+`e94!9b32m?)Po`Ui{;K zOxf_;|Fidn7pGoz^_*{BJO8%t|KQP`yMF)F-hHq38IbXm_$$5mHf^DUo0Eq&y;5B^$HTYSk^E-PDi*NjC?`=5R3<=6iG zozoqfIe*x#e{tVB$v@cb?X%*c-p#-8oS(E}urbiDyT`c;+&)A1d3}A7r>FJx&GH%U zA<0RG-|!j8PDZNRW2AWX-u*pS`3C#uAd_XJPIq5!Af>qbc+*lRy3ZRi-(2GU&WPsy zo?9O=26=D&-1w$%KvHIs5ZrgX$=*TUZ~89uOimu{hBl1+l+o@%-V~$xA)?0Rf6Zv# z>c7}XGcNX(_%HO_+R-P|Kd#RhBP%T{t$D5c*82vg^k1{yGmZt>)jKn(`FFz_Q=1PB zO7%2%c$)u``q58};-nSx`ZYh{Z~iw=a^^)wvbV%P*`MldOc`oia4H7V^ zclz`d`Wn}5#@$ku#INC<_LYu~#mN7}n~CxF6TCju(XozSiJ$4@k9w56u%BReX-CIa zJAQ6g{Cd$@hV#D9yOK0RtUB^4qTsstMb~-%@{K z`GSjSqk{%#B5XrkIw^OqU0zT0F6AsEUYps`Ve%u7hec~t01HY1iwm38cXYgN#plJhdpB|JiZkN`N3RpNhd8>e9tk^2*kgnZx5G?+x#~)#6J8~Bm&n_s z4Y|TZ`7Y~jen`{V2EqR%;tNPK3C$WSUgVh6%f9g@O2X2!&)?x_`F5n!){+9y-3;1NMkPU=qR_!P<<1ets{If z;Zl!061J7FI>MZBl<|0iuyVp2nsI1C%057xzsjE1_IOD6`-JBbK83#>+)F)fKm3aD zI;*|Y6Y(&d`1`+Ok4?FS2Wi*Egzq8T-LA=O>wO1qyVtRG=Lji2Oso%prH^P?Wga}=PNu#i2MY zBZO}vyv`~=-NBp0Jx|;xU3t32y-VEmCe}9#-`(afpNi1Rm)bNJH-Co^Ug?BWzTh;E zuxi2_T9mL!gw2afCwQD|=bd7YZ#+#&{4(O#Uf=T^lK2h8pCY~|c~I(ng7`_xyU&y7 z37ZxdCgmI^Y$jpr_&af~O1v0E_7LAwJ%Uq{_|zNE%kIC2lTpYj5i4cv9+! zTWf?C8i^bIz3%f+`m~ntd4$K~b`xRK2vcn(jpTofu$hFJ{4HfWH1@ome~pB@=Bfxu ze}wSoNxw8kzp)Znyj!62|o$ctoPS_^G9<%vO;@T(q8cCBE z?T*JagpDT5DNE9AwA01Y{v(8ykj}T8dBNjYg2|ByLm*%PoaH+;d@Ue&R>P?-z<_qj=)#gcAYN5^`rU!Ci%2|Sm$Cy85YwRL*pJP?|`i8RA^bad>u z^T*F`DPtq?&lA7$EM?FQZ8vE~KL9V3GI%8H0AW)Ii=Q{|5;mQ%M4ZaT^`;)eGYLPM z5H98A5gvLFJ>8!|r%^)&hLHo6K-Er!B-W zP0m-C`J4e7TQugv3vtI7pI5|Nhzmykg$u`*g!A%>Dhf*`6pqQina!>Io1G;2#li9U zg=6yzi#0i+749l*Y;ob(yfHO$I)g(lx#K4kE-0E1tXyc4wO~x%_%Y)PMrq>l8mXUX zPMbE#%rBPewNhzzeN{tvsiw=mwL9HYzce_$YJ6S({3YY-oZ%*>>k;%ik6Zgt*)ley zXQ?ret-U!!&IFcm68KhrhXW%TD)=FO#{eT1DEJV+C2{Eq)TYFxzYti?-Brgp%Fuly!5G-rtg zA8fU1cLHw!R{a5f5!mgN2R!K-czIG+c}>8JlTGbn>Xq_`&Vzran%Z2u{P%!g58zKI z{UQFgZ}SK6>o$Djwea44ruLEzzX>eoT4i2H`fKMy&%nZW1wIWdXLjps_|9_b2VZ$k zd|#f5fwct=iMH z2t5jX(M^Rv@zHV~p_d;3KjGky5&aFYa}HYQ<-lxs%h0a=z5#p`Sk?vU?@{1SfSYZ2 z!MA81<;f%C^(O6EJiyed{Z{(766zQE%Q=%Q^ue_U+OqTQ@`3jN-voS0$_M@o_*9=R zdd{IC{y2C#uv5R}_$KgH)0F1$=voDECh4Ua(my`^qYa76|2XiTxb(jT9!-3}PX7*Y zC@y^;Y%53N(hmfl9+&=d;L5o4OMu;3CZ)-vYvQ}y7?=KMz-E>ykvzJ#19&y@uszk@ zKLBrxEAMmQP?kxoJi5l!#@a)~4^ogz%LAU5Wdg~gYbC&YiFf9I7L3$9}+(l`-5}-UErh4ul-s0 zhBJ;rKmDLje3i86x&==mz4Hit%HJzTn0An^%}t0Gn@TZfs-5xN0=)Ga%a00dXdeOJ zG|E)`Q0V7M=x_+Q=22i^?qoDG-uJ`e1i*%tVn#mG>kzmOIQeUGYQouhpY zKlm=NoJY zFW>l`1nji`Qqg_m;40w5O691pT&Li!8_d4j;Nl$;L)F9{N zbUN^_;>@@-QR8x>9cFK&a=>huLy8_{-hMAHu6#5s06q;0p^-r?PQT@XVSH= zOMGz`{B7WV)Xy|k{k^UlT>yF*F0jk1japd7N5=a3obxcJ`#Pvg9>8h_Gj^~h4hOZie>DX?>fT3|k} z*7-<(7bL*9B)}UJ;9n=ehZ5kA6X5h-ozxA4#mOm0Z)&E`;pK&4=(hW zinH=3lT2+71SajhR0^^m>96QvPkasjXV)is({q$Zv5KBQ06rC0{y+%*{W$n?;Me2e zTcM}tuQs(z8$ZthJ7>bB|4T^kJW~IQwC~7l+DD+YZwUCke@>S?CFd@d&FzAt3HfgX zzf-=+`jBDe|0VE-I^-*RzRkZLepYX4q9026*D|r2Ig{@qG3;gSZ_WvmXRtvc*-J-vdeZfEV z!DiHW{Dku4+_u9nQf~ymz|Q*e39xTqSAU9bf}g~}%YZ+LgMS0;oXwW@odS+8{~Ofr zJThL(6W~n=@V*52g9Nz02uk)NzbFFsBlyTkfF~uu3liX)6X1;r@NW~~e+QPk0TlmY#>*qH z_24fu82L6K-nm~vIK*7y<*tDtWRUey9)YdLf)B^R+ek0)1`;^wU(0 zCvTP1@>u01!lznH73;(&!i!tG$0x!ER&|e0g!`@O9v=_SqrHpizmjL@&uZX@XupzY zfaR%7$R7{?iu6yCUf7cK_fNnF67tJ=TIx+kzv#Bqx{6b*4wnp%hoMc(~0u+XFU{0Z!DfnHj>;PJph zZ%+ElD9?FhJ-8OQk@;ca*R7&5k3+1H+%q9+iolJ)a_2;v4gU;S?w@er=YZud3K9Dy{V`y< zm%_k35wKJK*MTwkcEUFS z%Uv8!dv^fKog7Yk{{SrabEMkkeGV*lbvWabI|lp!i<%_;nE@Rv0xb%I0fd2sVX}8PbKUV?^eIF*h@T1hb(Z`_= zwf>-g{s>t31I&YJ%9|c|syunVNbC0IUd^c_QUf_$F zukwh#JL6sprg;jE0x!lsE%izKE5IRVegg;Yqy2I5Gl8ea#oq&54(zk@9|B$+7oS1H zmH{h#QQlnO=D7GD0$0bC|3~1Baq)wH$a)6swacFed~aNNqkn`v13uOGQ~nZQ;TI*O z7yM1#h`vvJnw|f4;CTH0DFL3vcsh@)2lBVv?`1s}zmogE9QeDW|0JtRo{(_43&whM zZ6on=7mOM|C{P}Ot;d2-o&)|*@*kmmho1(=X#fFsYw z$4ff7_sV*7?f+KyHt?36Wnu507-QN-L7Vc!N^eivL4x4!`u?D(nPg^|fgv-_OafwH zXMN5&&6zpJ^O4D5w6QnTP*aUwywXdgp&|wv5lX+wfPwZ{z+*d!FY)|9BqToNC``U>ny*%6|yh z#_kdL>+aXj{~YyYJm3A}@K4Gu|>jZ#3}wBf7nS3jaHSzsU3K`u!5{=YXGK%CGxpv-dwr`|V}t!-qTl z^We{}m@2wIyYT9pXUn^=#N5%>fzciCi*o;G`9b>U?ZQuTzlDGHpTH0C{HIL$Q=RsG z4*32SKl$p{!OvUxs;ftj|0w*&-!}7y{{FAP;{Pj`^nc2FJPRyuBJjPyZv=j(f&YyD zv2l>3{JVaR`AB(W$^(xt=92z81uXBU)~lIs?f3l&$|b(gLGH2iLSTLA{#@^YKk~?I z{Wknn@IOWS?0WeQANz}gQ&^t!;9F+zZ^O4y|1ruRrJl6!oxqO(%lxtJ6K7wE1pJ%+@!T3u{@Sz|5^|wMF=nuJM{61k|)jz=3gsMpWW9NIj zJyIYswe+RON8oJ)LriU)8SPg>QV@Yh=qM>F@u@`h9~PZ{Qz* ze#!H=P1XM+VCm1qjOVi-*8TAuQ~n_PpFID1Qy#npeu?{UH06&1%lLfGz@Gt@{zh20ogn=36F&!CZDe+1OdsP$lp0 z;Fow>`qJfX_=mvv%;!$|XQ}r@tNx>uKf&{_=68`deN3MJ_7$zKGS3rOUk66t7(>s9 z2W8i50(`aw7r^(nV7YJe9V_~FgRcue)G2>!3;uEN*;rb#et!kn#@rJ4^T0O7mcY+Q zm_IzgU_}brbYk`tK=PB z@mf=V^pBtqz;em`Hv^Aa^}qk;kssUn0zLUfVCny3RFmg_>21KYNBUpjr+xwcj{7bC zZ+Mgf+n?ZnDX@+ECeM2i*v4-Y_+J6r*l7ZP^V^Xhg70sDM&Pr+Htw0gFQUKfW#?PF z|E27y)_4f~(H49=_kXxGf2912t#W}SzOKFwj7YsR`e>{E{q&dMlN$2=f57=bo^Rn> z-mIUm_7BRRdQRv*lgb+Kt-#+c4?bMk~ZO zyH>SEb}{vv&mZ)(fCu(eOMZp(e|sJDf%m;g_qFAh9%H|tJ-0~vY0q)q$6j`QwBJ|C%J;39 zDti38@Ml})ANq%!M|s{RcgXu4fF4PG`~0f&ya#~ge({O2{8JmBJowrtR^)?AKfewC z%MQLTcHn2dNZ%>{%KN>z1AiZ|#OPD|mBBBtzV!2K+&y{zOaJa@B(S1qrhdEprzk(% z!6&fA_eYfP(Enf04>Et`y0caOj2AP$lt0^)zXz#j%y^qc!10{&tP7JL$C zP+tc|zec&h5AlQT-*&mwlbD41LLc{C8gA?3+T~JD;uq=*eH`^|yg_-Nw*uSC&Zl<$ z4@x<)`Rx1sCt!(B_#A$=?GspEy8k6+p@oz0=6S&F_i2|)J&A9qFYI}!FL3*P+T~L3 zqrbkQt1}{h^o#oaRC}1e|AqVQCGYcBzsEv)J_*#mU*N}nV?{o=bo;yT10PsXrMA2a zAAWMSybU`%{}}ye>EEk>PXXKca6hn((B({7-=8`R_O7 z&w3~FY4FJ<^x+i-evX0P34VJ?fBZJ^gS5B39t76cfzjW-X*7BWSnjvuE3m!}jQ-(G z%zvKuSNOrMhsRpwQtu-j_}~XuHapxaJW1YYV2@=C8nf>zZ+QMQ(E{au*9mg@U6gy zTk!3`5^K_yzXn+1Oj=kzU-?@r8Z`agg?BpTANlZX{Wg3K{9pO)mC?gswC^jhzVvu@ z;WvI{w!8~J`a84bUHFMk`R{h%7k+g1{_v!Q7etfq4&L!|W>7U2H zV@hv61^m_)JmR|dle74`@Ebbi$38V%zYD*zRem*$i;WE`>-AO4XPK||eDU4?0)C73 zsQrcc{V(4`ds_1S>mJA6f%31XoihJ#crWx6{Lcgy`uHATd7j)a@K_inbJ_iDlX87w zzfSp6;QJ zfq%QxzApgV7^k*9cYJz99?NxL^eu;3pD&n>pZxlXR=L1mXu;n_{pV0$^%w111^zOy z^pD{GpMV|U6$AeU@QuX(l>U_R{|J1Fa!a4DKf?S0zR{HPF_Jii`eJ{g+{R{=`~M!W zjmIkRPXpUnrUE|+Y-6Pg{GWhr%v6D&b(H;&=Uu}C1U>|8W12YyormWH(3Be2Ao)YpO06V#WOnpg9K-4ASxP1|2Lw(9%G zSg$6wri}lq4Q$tg;9YIi7x-N*_(!RKoin8u?*_iU1xx*F|HF!Wa2*(ZhH{7UHvY|4 z`8CH!qnjzW^UnposRiEwybf&F^N#`_2L1+x9s6J4hk#cM%*RM#Z|aLl!PSK&=Ci(Z zc^Cdlr@RXv{FB-HyYLg8@-BS%i?jE4;p@IMTi%5q`p>iFU0C8->r2018~#1|>%*=7 zlzN|S)xY+oj3-8K?eRMNf3IkCjHgfe!A|*Ot@77U{>oPQ>w#@dSDA0`0k&~l1^zu? z8;e!oYhN~v$tti9Y~!yA{2E{z8&%-f1KXIW0zVFH-2}3f2_|B0lyzudQR5s)$Gq7YQaZ=f3pQY0Q|qU;NN*4@<94iohQKmhphkK zYL!3t*Yx^T>y`4?0>6iH`~3F<|1$8`ndkpE;Pe_KM-N> zXW+l_0oEt&d8Is^@;ia=1%ArFKL>o1f5YfQrv9Tm-(E8QAMe2btph**R$E)om$M!C z?|0yLbl`u}fdyN;Ka#(%;e_Ai{YNKfpC{0xt^O1E@K;ylgX_TP-}8P_E-?V){ugxa zzr6$hNC$qb1AnpuUv)}9N&c1o`pypg$`1TLcHnn*;7@hntG{;^|KI7ruj;_B>%i~o zz@O>B*PNck?{?rjI`EHn;D6D9f3E{yduA5D-+^D#fnVQ&AMe1w-+}+~*;)Ky2fnid z|5yipUkCn!4t(8hv-sl z0(so_$_TQo;GY6s-2uP3|6vH%y}K(a7OdR=&94Igr?q@u;6vX(8odR56V{pHD((Tc(U{0a2ncc$<2Hek^Y$^IktkKT#A=c6l1e=YF80haTK zecu;l(Bltjd5e@k3@q}lhwc421=My>aO8EaW}W0rUR{84ol6 zUk`kc@qZ@we>3Cn-Oun`=9mmz)vFYHt?I@#(40) z*8+bt97+BQ%-2VuXQupT-ab2iUjc59-)r76JAQxdF)jbI@AGTG!hehXqRfZC{!6p; z>{o%?^z0|!JyP;+`~D9-&hwbRkDK@V|K6+5<07vYeAWBtZ|3hKroE$IhMuv$?ET;V zgqHV7tTm~B?AK@M!Dvjj!ky80YeSOzjKD zI=H6mj3%$THSi_}Pn-Q!_ZItBCO*h!yg%_M+$Di<&#@2)X$epb@QJqZ6e)@DpdKzTP;c4EUOEzbVE|z zyIFE%ihgrv%Znr#-(>B=gzVTwC9l~a;58x=rj1C14{dE_mu_F%UL&`#npwMHesI_K_{$HfQA`f*hUGzd zqIs$(DfG%Bs%rApB}J&78Y!=; z=>X{wFE4T@t)sEqtdicU9;5Qov&WN(5R02{PA1KW_TJhI zXm8EH;FgCeg4BCQLyvlEMh5rr)-+_P7q^fl=@V)Huy#ww%N@hp51AT@+?BBr?DEdT z+T%)>%PqrSS}jz$r6J0_{p8vK9zO4;J5E3L;jeoceL1>#e$`ps+N!HCxI53Y(Kay( zUwhZx=f`20lIXHvNtJ;tt=YZQEd$mb+i8|3PLx+p9wg+xObYT@`k9lA^}dr>bP2hQ z3vzsJM>>hD8}q|NB_QSBwR7YvO^zKobZTfW{{_i>+#XvbrWD!+uw@s99=(P=oZ$*+aLyY;yMGDOONLOx4^k zoYE=%s1BSXJ#A>QgYawqUiLzmlY=Kt!JhJ`S(LPLA`;+6Uh390)2x|?j*|sh<@lxV z@=ql>Z;QxxLx@xjpGCk{yDRk8bR}`{`7ud(3pYw@KdPK04_r;?mKHk8?(~)w`pXJ~ zWrg9g!f07xysR);R+ug+WNj|)KKAG(h0A(~eRs*7%X)~tRCXJZ7n0L{?e1!OOd{mE zjL4dtk_Wj?Vl}e9(8xGa=b=vhF`LhkP?OvI&#wY9Uc zvA*rP=e9O>H}gyD*=sL(@k<0aeu0GULcd>j@Roze`8%psj=#RKao6tVB;T#;YKsQc zj+eM43nR~5m#tZG-TOivkQ&}1CiytH(>kk@to91>RVQW6Il?exkz2Z1okeMpam)#7 zFHDJ>9ON9di!uuHakD-4)@-P1Z_S3N_SSR;4T9o0TyN8#Y;J5uhR8L z>GqeG+b1MIG+z&|)ip=YjSGCAs6XaL#K~o{RnS`{=jnpP;Xd1CntP0d>8-*E(>x3F zvM!6bfZEknk;Sziy5#ka18=&u_ST$kn7vh-UAVWV-h=wqmEMW^Y6T>yhC+_a(D>u2!f!BK>MPA=@?ok8{$W#}&!VizKcbw={gHUPcw7qs_H-)_N9^ zE8Po7)Skhu<`$Fb;>=ZCESyao=FG&3aj4R|h_fn;y-JCG24S>s+4ErE%&?wn!LVwU zu=QYzM)}$W$*Vn93OZR$=w`bsZbCRH19DbJf%G#byTuY60Zo-N|(8# zC56tiLVsDIx2!N&Rv0cTOqUeW6^ma5iNTUWf3$I-s3t|VzCQMtn{^n+wF?O&!+@nv zRpE|H_{uCVYRFcA^ea+j?r3{q89UR$GDy$DGU(01vS0*zGA{DS&%+{3IQC|4ZMa-# zNtwH(%v)0CFDYBrmT<{^(UP)wNm;U_EL~j2LR#2oOq<1JOZo-IcJX~n`USSO*t)d2 zvtdbMTq6bdq3jO)To9#ZQVpo&n2lA0{;6NZS&>9hUIdwMChfUuN4DOL^W(s&^B`b* zb}Bc6acyR`2!aDQbBna(!{>fOlbL~w$`E8DP{1Ht3Jlg|rOWU2 zmSXmomIg~p*>hJjj~1t#D^oWndx)32y0clOyZO#~HAW5+dZ8CNeh%N!$jFL~3)?%B zjkR)|BGz)_vdC+sSV+HZH|~^UKY}B#eJ{%4SKw@PQAd!U>=DJwSs7KBIVRU>k;Yk+ zr;(GEW!918)Ap`vq;t%Ut2~O`AdW*fi_=ic0Fer!hOo|DT-^aETQm; z8w6SIT`~Stqo)G}dsN4985LgS^Arau2R-KV&feNas5C8cpkAd>oHhNS8{Af#&6DjV z977J-?h4hTd2A3TNgBjKjVe^u;?w(BH_)$)&=F-(RmxF_MH4%<=LLmZp{;$I8xXH; zPxiEdi60kXOy>u+FuzZ48_cjXM!deqX%FGEs8-z&?dH?_=&)Yj-By~kv_N9!gkI&# z`4Y)@YqqKRTzca{VmIGKW)aGL^;k z)>IlArOfHC+6WK&t18i>EGVrExJ%>~C>!exiZfY7RN_G@c4JXl@=vk8vAw%h@g2pb z{KHsPPAVTZ#z9DYq)}Tx<`+nK67?*>d>vnZ;|ztcz#%hg&$)N z;TEo_PwYv!Z_K>rq}JPPSfRmKhYy<996x&-;5Cx`{;G{6zrSju%IL4!NKtyL`olZR zzYMIy`_+$Sy+?XOQTqrgxbavi`^Lbs%bwYRN7YssM(n97N|7QEvXwOSq)N*uNOO#6 z3Y2O^G<<0c?_l>bsy6Dm-m#ck2J}|-h7X%JyaE33_2>^@kN)sE?jzJ&$b>2pxn)Dt z%y5H~x1Bw8+u6x2hfbZn?evj&GU2SSwi8Y!FFPV~ZV|F0bIN_c!U7}ok#jFZ->mOA ziR-e0duAgH5Jcrp9%k^55gNu4E3NUgNBgTb6U?o}Ur*VNPt%D{pnGt(ku?)?SvEJt@?mqmBEBRX7 z_b5yjjtipLg=Nh;Nm3`svBvf@&o47Ci=!B6r(Z>0jodJF##1K0x2iJoRGVOb)!_}8 z9&`G!Hmk3{YBTx!t2Pt7ziLA%daEMWSUfx!GcFuDwT9#b5^P_(P{do+dE7zn@xo$v zYYR`2$p_Laal)0H$J+tbw1nCBK1?*rS*-hG*a$3%j>c%u&_m8 z>*k2*4OOU$g7@Pb;9zGH`&r>SQR0Lc`xFs6fduX3@T#Ge2eyP|>717K%FNs%Ok+$$ zUBrRdWN6W9nrf4)Aw6+s2fvVBXucQ-Mx@)n>!$tvVII^;cc8VNDHzuq{GM7*>Icp$it;LF&*eeiEfJ zm2!7#?a^Cv*1R~`yGqnFZ-hnTu@<_kBkiFw+r*wt)I0MP6-K9HW_(_<%f>~P;ekYZ zku5D;yhtI99J@7dUA?x7jok}Oh!ZDoIdnoxM<=(OyzSPrdx!Lwj8DKlAA{d0! zn70eT(-pnI3aQn76D2oL0&DILf-ny-a?4rmm}^(f?Cx!k-%$DfstxPdU$xnh`l~kN zsK07+DCw`-Y_$DVm&m=)(A$Xw{k#iRcu}P{+i!7oL8LlmeB{SjT;vty<4T{A^8}H7I*nCKYlB>WAo-lOd+p~YZ%HxZeKjho9-xa zj3|mkD1Vrwwen%iqBt!u+Yj8d8i!3M_gBTJWYH#!{z5OJEZ^AL8HX_rco8(B#N!Ta zs8MCpW3E|js-7|z_dJm*PcS*3s2{OE-`>v7RlGDRC?BO!;CNmYW=#Fj*6#LBF)6F_ z*@bgR&5$4_3Fdyx?IeKNR?qPU)xvOa04`^w2~eHaFztRAVc>)U-|FUhp+;vdD*NtM z-lAan#yu7L`pp~n$dBcv3rd`)wc2e-A3vj9603{x`E2Vh+3U|#O8B?uXSf}uuHCcY zVN-B7=D=_XTN~$FZ9tLS(ZtLB_;gau>gSJ$?%WVoEI#ToOiRZ{o8@$s^!{GfMYmhg z@HU>Zgh~cgjPwz|%1ZC?p|AG%J-6(6o4HcX(#O=oE3?4GA|VK-9;dMGQISra5%ZGNW1YvCM(3iJj?yH^u}TPijMi&EU~Jnf@-mOpWrdML?o>5I%dMg-HxK#m z-1$o=7sgKO>l?**E?H|f506~}!!ay_s|veMhg}O=%<(Ap@(Oe4aWm$c(Jwb%&n|83LIqE#&o)6SN@h!mSASKZi7K>FMWhcMy(oqer~rrV zJS^Q5gIHW2v70fA!S^Z*!D4JYGh7S9z^$>qcCy$@qQdboglMLFf6b;_`>Qqw@!qN& z#0NJuT{c?LNcAO))q_xK=WOzmS) zg*WMD1=m2(0=zrr&=-ZJPm{8w#8<#~lG2Xzga!-~YWX{W{ zbiI5^zp9EY+QW{O>H|8b7`#G|J}4vVt!&-(^f_k}cc8UiDBZ~<|U*!fxJMOYc)nHt9;e9dbjEaZ+e zHE`*zITiNxS8Y~UZ`Gh#;=NV#y4EUHw%rV_>K2tZxpIvu?>;#*SN#0P{&_({#KsaCfN_xR$yK3Wx)tGQ1o{*U2KM zuE$eRaevih*(2j+g-h>Dm)wcqY4K}nQBAYi&ygUhd$pw02uvZfHReZ3(sx{a6}r21 zAzSBojh*$@u9%gM$G2{@p$j|? z7a`ksFeN3uHJdfxTXQ#sVzt6D}seSOu^ z$M;ojY0i7AHk7pYwOTsvKCBHL>qXko(cYR<>3)CJ;Vb zGKLg3WC<;5wpIxUR>FSOA&Q>@5m$-@bLz{wJb@zh(nw`SAHy)~CMEm+p>rgMS> ziWOva=vE~yN3JiYxhM#5vZ>=b6jik0*m|o@2}FO@W-0epg_alx-7P%Q*VcE|E^Lpb zfq}@qE41c*>>0-w;RBT~Z+}&PcvacthG9kXGq~#T*HSFOum(88Un`IaG7#(Vs)2AQ z!?0pCHn^(H^kGQ!K8x+7LC}@ zAwWqqyz1c5a-G3b+jWM&mO2^@A{j)d82nm_$r*@scn`RP=YY$Bbl`$P>^!{c;Q8uu z3^|{zT^OnGJ6k)WX=J&J8(ZbJg0Ty!F5IoYDy63Sro?vgO(N3~1Pj9=!cNZqAa+L0 zFX9p$Mxxe5*0-%Nt6RD0r4`iHBJ2ta!kRk7T$$;K zQ0am3BA<2R)nbl4I$hDl&-Zqo^LDe^XB+xu#!*_im>9#FKs3TMH$(xH6?oxSaS}KM zVsa(Z?G29XX`d6++JNHF3dKxNP?KHSBh$+bE0eq5~owvaEXZ>zW#OQqhO69N?l&7>bi7(+n^-8wx~>ihQBzBJCfb@=$LH2J@@#!Peu?_jb(z)LREn11 z?TY0KCLAu>D5kd_*}s?rl_wJXEA!F>!s@wtmg+Z+x3Y^9p}y(q?BeZ}ir#tlpmFeb zW!_g?cUKd_Xiqk^$9I5x7={vch`9toI}gOWr?(t z2B>;89_a@gHs6OhhMfo??S5L@Cg%O68P=zXeQzcNF=hfU%#*Be9FihnZ)Z13`;ai4 z$D62uII(fD+B#Oh{08j71$S=T6DEyZcwmCoFSj+bb*(y}n{;v62MND@o|H7yyi z+2SFjm>(FXjfrK1B#5YHVuVMG9Ae3*0paY?2&c}ncWzjrhU0QI@t+Wf_aev$ehTAs z-5m0fYYSY%^v<0c4X-$m&}F{sL>ZCAL(M_#kzGVuvf`T0se}a#72#ba>M${8W3m>Qv%nnbhwJfZB1KQO*VhVR z^lD6sFd1Nz#C=H;k|^#)^`uaM2)-KkEZ5VY&6Gu28T)Bf#~G|FH*#A`jAK1Fw2zk* zottcIoL^FBvc0;oOUeQ*rcx*C-oya0>2VIHF}BlCW5z2aW*sUWS$vud3*)?y+;y}6 z;D3T(4gRF!80YAL*asd?3j`w~KSb#f4?1oUwJ9;s-zN02j6xLSnS{#{d}vIV+9~yr zL71B0`B>n|gmH+@7STWse@@_astfa>HqpiV(BXMJlun6Y=)MbQT=^kfwS@Y#UD0OK zjM@9VJ$n8wI)gvY9hcC@XhP!xZ#Bc+48%Ww8=b+A_ZKGf74fAxu@L}lQIEQg-bdHh zwq+oy)XT6@3>^nIzA`dwj%`*V>Re(4ZKsE2=A7W35Xa1|OWcW7W0?~ROx(*ne4J(< zIOoo&VXZwDd!?L&|+8{ zqTWqcv+Y&PSP9lnXgo<|wn0QSqP6*?GD~W#<8zX0v{b9Ft9KU69`=JxJ9XVqH-Al^@KlNN3naUbN{7_HBbjF_?*+Y{yWRIlO zY&ojVHs?~(y=@>+!c+?(53u;H95)_-vJ)M*0@<{wNGocnuS6B4AAKT|>d1hRK0mad zaC=AmF>p)6(?>GYVAkrzE^#wkQxhI*f#0vBwNm1NRdgLWaX|fu0E&bGAT5oG!!vK% z4V$;=l_GH6E5_g~#$XvYpUw&Qx_iooG84{yJdNx=zL_BJHxuLCbRGJF6o>4ZP=bLU z7C5^t>^gChLybd-DJAbC{JygIJJ|4%syTc4Va>f~l9_BgKD%{EX51Os+-KYbAZZ+l zQU{rn94##C7CQ(o*)~N&jPw%MVR@Wkr+P3i;P5+JD$|aWc*!xuVeXN5NcRAtW%oQ8 z!Nb@L%e-PWw|di?SaJIt{KF7fK5pL#thj#P2rOT-Zv<9pv2O&?;z441sO%7=sKi}i zYYnjivJ51XDkr7uo|*!&E)Xu0gf@wb+&mU$f{?;yhwDwkU`NxBe8-Imx=BtG;*AIF z5HeATBdVl0EXSrj*g=mna} zcaC}8BbP_S4%nmEbzuVtm1_pZCAJ5?H>3xE`-{;{p}D3%I>-h~%suinqC^OYrd%L< z(4x@&A`|^bLLyR^g9RBD%xNajA_IE3$txm$q0FFr7%7`y-#nDtJl7`8dC&QzL<`DTG?by8H_~En1W=6+O-D<-8Wq_c7;%ga_SBZ!cjy_xN zVP1mf1vm|@$$jWx2y2VyKD#(nR-d6FBLSXG&NDuJ%fyW)zSEv|n$TW;k{vg}=bi*0 zEUh|h)Eu$=fEo%V2#h7%Af`2n^yS3lPY{iHFjx-ZD~X|vC1S|A54s+2p)OGL{+p(AR160mIG7JN~uM)BbaUEd?VH9?I$SBu*8toLE) z+^EZLxz1L#gBZe07h)1hjtCdS1Dw#S7RTRWR}=mCoRAD9uJNl?aTi@BRsbo&T~fO+ zMoCKw8mfbNh+zbgUpxgc%>X7?byQnQ-~<9vyHpa+!mG&w<|nOZ&magi0uBQP36>rf zg(OOGh{udQf}6W3he*}+Vhx;-!8Hpb;#5NoP($FFF6o7;5Ha-FbUot01l5O6$FbT` zMh5Xf1eSZ-KL)cu?H@s+C;I*om@Rhy2n?67e*}h0*gpch+UH@gOK4X5VAN+?WI=i{ z_I?RJUm|)5jrvTTl!b5JC!^|k#HRAdO(*0D37pyRe4nsB$Zg5$g_4g55?Ddf#;4iQ zRZo%y&u(-UO@MivZgLFLJ&Z$yq_vK(Gix%^Yf`cMdsk(MnF>)g$d-jL3ui>LDtl8o zd1gY*Ypq(>{TR%ux&jPlSzQ4JGppxeXy&9$uYEgABPYRwEFlea5};b`nP5it$H`>x ze$6sK`@Tn^QN#VzgoegIO!9@aNc-$!l8Ef0z|rbf;UYL;l=C*3X+R?P*DMNUaA7y746j^5BV)mVOpWchbqnt_6^eHJl2KF; z;e!p0#2Cc>_mxg*vRkg*ZNyQ+l1z7K&r#-wdYdMY@v03tgry&n^fJ#7E|H7R|6C#KEdGktc8u}rO|pa?Gv&yNOUibK)htomTb*T zdq=IAvtr!REE&u`O3VV0d}JPZA=)!?(Y@0ZL*B+LM9wb4c15vPHqI`I*<=yY z&1|~(+J&qG5{RVwZD;SXLB7ySM5IQhLy@49pGUQQwyLiM<_=xwIH(c}AK7=HS=hNX z3H;@TRbE6cqWsLC*JOh;$I35@Ox21^VH$!%v;=(aSI z>GnUM9iJE z!y4f=l9@TJuq=Fw8tpNp2}^XIWC0eg5B>;Rsvg`MSdRJ)(X2QsK)zs>b7is1N1RlY=Pbi)cI}OLfxj?9-mIQDr{c}q8 zr-|!=#>oEaZSBOxdX-(+-HdNJapcggw~6P1M?PU#GeQcApHw(t1D)TUUSv#tM5>6{ z4pwkYSMwOWqe`s#U>G^j`jHX;JK7e7#_ca6^d9zEo!3l&lvW6oWGB0;LdYutsSr)o zNk!=MG$%=n$&!fSlJ>}Wx?5s4Yhf`_`iOCo5PHoT{<%bjZg&NO=Fq7L;U;0hePh-V zx8qit{?y0dPVkuphnKyw4^9>?=7!8N2Z6Y-pK5{iM@+Yb7u6n_`W%iWxLUFAW7MLe zn;N??Gx4dcn3{1-@K~eaQfp-{9}Qcjly$s} z=MdyrF^6A+Bx0&y2J14qI%K$a3bKImk4OLCPr6J45IGf^diBnTfmdP?;@KuX? z^ZZzTY);lJb4(g=3gOg%kZ$AB)BSVydG~3*;Vn`l1#yjb%v}u<}?A zLogy{jWu+c-|r2}aG8-^_aqx0)HOl0r)Shg+|4j-9cOtPug?7tyC4Ds;ewP{TkoE? znG@Qqd61&cU(?|D%iet-!GQI&oJy>bw%|rW1 zi)S*sQAg(6vF1W3P4*>xwc&4xgG&MowXtD*3D=AMCqQ6CDrxlF1KADN3R~v!8^ac+ zzj$8rK7a0+JY`4M)bDcqHpugWt$$JB0gO3JY&33kjaJ=&>&RHcG|P zjckvBcuN_iZWLPFQT9|R{v1h&;WzHN+A45rT%d01gr_em9F2*cjJTUH4Q@xpJcmKY zsINj*mf!%4)u3z5FMF9s-|(|@)@z&fB5zCAOV4n0a1t;@>N!|O5ZsPdCIHXfrjVS20{PF7|R=Mm8&h?kEq*w8mj_a0%?1ACK8saj~0<|j6% zQKn&dl%q$%RjDA3I6-Y}!{*6d)c(;cy0ItT{bL~Zu-24a0Sap;J`V+y>S-q7QHg9V z@k8|~aOquEVeCy$Y^h`KyLq%frd;urEXOdM2R zGHJ}j!9C1}hE%Rw#$&y?G6BT6TZMA1pXj_PDmIXkT$vx3d9d1O zLU6jxV(edAI&_n^EIF%kZ5}WE3)RI~WzRcun)?XE;-q%DWBTpHJB0gxHE2IfMPnd5U+Ia^|qId|$TG(L%%yTSPb0)5E7RhmT=fA4P zb~D3970(ikYDmymk(k;VQ4k3St11UYK#X@4c1umJN@Lp=Y%r=^A%{C_ za82VA=G)*+y22p2Cb3uL__&HS0SWpICCqy+uuafwgdJF`8G+oNve90b<Hh=@isj3|omPEdw-4K(;5+9Rc{nzl&OWG&iHG3JYmKf8))d&Cik!-_zjM0G*X z*qjnWERQhJ_hS^g5~_sYI=aQ!qVkIy<#=?XY(vPE5rBtaiiE8~s2h{aL$4EJn_xxD zHifY^djZy0?m!Io;BW;P%&^YGAQYvYZBg-nhqlh`o=4ubJ(%EfuCK_LNbplu5GHM{ z(>-p%Nxgfa5K{L_+x{^adbhAAd*33k`m#lB=p75ow=Nuu zUJO>6u@FP=60}Ca3#Pw`)+#&rqUqiV36j;M8p5zjg8tzH(iUYI##5qK#eAO-goY^| z;ggRsM z!;H~G4(3NN9WJ_$JiP;w-WKA3*kvNE=Ro}*10H~*zibt_U zdU`^soR$x9kT_o6qol&a`k28MjSlWrCGoWi&CXx8F^Byv=W6c6sh@pRLUBV#P z7Zt?_p{KfMm5LmmEefMOrqz%m!VS8^p>l3v_oT;WU9f_4D@lPTGpkzdbWXCd;rze+cV5sxL z*Y9PztYyz4rb|e)B^*=re`w>&5Pu>hmQ#RO%|X95RX`IV5;F#36%nfucS#~?=~wDa zYG}DY@vz)4ibjyTe-w7-yn!PaeP11oR&F$fd_2>9eFmRW?<)QtiEkJ^^1K71PsmN?viQCgSn7Qpe>< [u8; 32] { + let mut bytes = [0u8; 32]; + for i in 0..8 { + let word_bytes = words[i].to_le_bytes(); + bytes[i * 4..(i + 1) * 4].copy_from_slice(&word_bytes); + } + bytes +} + +/// Encode a list of vkeys and committed values into a single byte array. In the future this could +/// be a merkle tree or some other commitment scheme. +/// +/// ( vkeys.len() || vkeys || committed_values[0].len as u32 || committed_values[0] || ... ) +pub fn commit_proof_pairs(vkeys: &[[u32; 8]], committed_values: &[Vec]) -> Vec { + assert_eq!(vkeys.len(), committed_values.len()); + let mut res = Vec::with_capacity( + 4 + vkeys.len() * 32 + + committed_values.len() * 4 + + committed_values + .iter() + .map(|vals| vals.len()) + .sum::(), + ); + + // Note we use big endian because abi.encodePacked in solidity does also + res.extend_from_slice(&(vkeys.len() as u32).to_be_bytes()); + for vkey in vkeys.iter() { + res.extend_from_slice(&words_to_bytes_le(vkey)); + } + for vals in committed_values.iter() { + res.extend_from_slice(&(vals.len() as u32).to_be_bytes()); + res.extend_from_slice(vals); + } + + res +} + +pub fn main() { + // Read the verification keys. + let vkeys = sp1_zkvm::io::read::>(); + + // Read the public values. + let public_values = sp1_zkvm::io::read::>>(); + + // Verify the proofs. + assert_eq!(vkeys.len(), public_values.len()); + for i in 0..vkeys.len() { + let vkey = &vkeys[i]; + let public_values = &public_values[i]; + let public_values_digest = Sha256::digest(public_values); + sp1_zkvm::precompiles::verify::verify_sp1_proof(vkey, &public_values_digest.into()); + } + + // TODO: Do something interesting with the proofs here. + // + // For example, commit to the verified proofs in a merkle tree. For now, we'll just commit to + // all the (vkey, input) pairs. + let commitment = commit_proof_pairs(&vkeys, &public_values); + sp1_zkvm::io::commit_slice(&commitment); +} diff --git a/examples/aggregation/programs/fibonacci/Cargo.lock b/examples/aggregation/programs/fibonacci/Cargo.lock new file mode 100644 index 0000000000..50211a6b73 --- /dev/null +++ b/examples/aggregation/programs/fibonacci/Cargo.lock @@ -0,0 +1,764 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "autocfg" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" + +[[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", + "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", + "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 = "fibonacci-program" +version = "0.1.0" +dependencies = [ + "sp1-zkvm", +] + +[[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.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3135b08af27d103b0a51f2ae0f8632117b7b185ccf931445affa8df530576a41" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +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.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "parity-scale-codec" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +dependencies = [ + "arrayvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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 = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro2" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" +dependencies = [ + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" +dependencies = [ + "proc-macro-crate 1.3.1", + "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 = "serde" +version = "1.0.200" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.200" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[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" +source = "git+https://github.com/succinctlabs/sp1.git?rev=v1.0.0-testnet#e721b246243e40376f7b75d7330e53c7351b727f" +dependencies = [ + "anyhow", + "bincode", + "cfg-if", + "getrandom", + "hex", + "k256", + "num", + "rand", + "serde", + "snowbridge-amcl", +] + +[[package]] +name = "sp1-zkvm" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/sp1.git?rev=v1.0.0-testnet#e721b246243e40376f7b75d7330e53c7351b727f" +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.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +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/examples/aggregation/programs/fibonacci/Cargo.toml b/examples/aggregation/programs/fibonacci/Cargo.toml new file mode 100644 index 0000000000..af7da6cac7 --- /dev/null +++ b/examples/aggregation/programs/fibonacci/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] +[package] +version = "0.1.0" +name = "fibonacci-program" +edition = "2021" + +[dependencies] +sp1-zkvm = { git = "https://github.com/succinctlabs/sp1.git", rev = "v1.0.0-testnet" } \ No newline at end of file diff --git a/examples/aggregation/programs/fibonacci/elf/riscv32im-succinct-zkvm-elf b/examples/aggregation/programs/fibonacci/elf/riscv32im-succinct-zkvm-elf new file mode 100755 index 0000000000000000000000000000000000000000..dea6e45e07c8cd4e85547f662eb6ed786560b6b8 GIT binary patch literal 127764 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 literal 0 HcmV?d00001 diff --git a/examples/aggregation/programs/fibonacci/src/main.rs b/examples/aggregation/programs/fibonacci/src/main.rs new file mode 100644 index 0000000000..edad87d4c5 --- /dev/null +++ b/examples/aggregation/programs/fibonacci/src/main.rs @@ -0,0 +1,20 @@ +//! A simple fibonacci program to be proven inside the zkVM. + +#![no_main] +sp1_zkvm::entrypoint!(main); + +pub fn main() { + let n = sp1_zkvm::io::read::(); + let mut a: u128 = 0; + let mut b: u128 = 1; + let mut sum: u128; + + for _ in 1..n { + sum = a + b; + a = b; + b = sum; + } + + sp1_zkvm::io::commit(&n); + sp1_zkvm::io::commit(&b); +} diff --git a/examples/aggregation/script/Cargo.lock b/examples/aggregation/script/Cargo.lock new file mode 100644 index 0000000000..1c3f7fa511 --- /dev/null +++ b/examples/aggregation/script/Cargo.lock @@ -0,0 +1,5460 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addchain" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +dependencies = [ + "num-bigint 0.3.3", + "num-integer", + "num-traits", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "alloy" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-contract", + "alloy-core", + "alloy-eips", + "alloy-genesis", + "alloy-provider", + "alloy-rpc-client", + "alloy-serde", + "alloy-signer", + "alloy-signer-wallet", + "alloy-transport-http", + "reqwest 0.12.4", +] + +[[package]] +name = "alloy-consensus" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "serde", + "sha2", +] + +[[package]] +name = "alloy-contract" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-network", + "alloy-primitives", + "alloy-provider", + "alloy-rpc-types", + "alloy-sol-types", + "alloy-transport", + "futures", + "futures-util", + "thiserror", +] + +[[package]] +name = "alloy-core" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1c115a94254b998be1e0318f06af03b72f54c631669cbd7801056a1bbd5701" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-types", +] + +[[package]] +name = "alloy-dyn-abi" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ab339ca7b4ea9115f0578c941abc80a171edf8e5eadd01e6c4237b68db8083" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "const-hex", + "itoa", + "serde", + "serde_json", + "winnow 0.6.7", +] + +[[package]] +name = "alloy-eips" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "c-kzg", + "once_cell", + "serde", +] + +[[package]] +name = "alloy-genesis" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-json-abi" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44294729c145cf7ae65feab544b5b81fb2bb7e2fd060214842eb3989a1e9d882" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-json-rpc" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-network" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-json-rpc", + "alloy-primitives", + "alloy-rpc-types", + "alloy-signer", + "async-trait", + "futures-utils-wasm", + "serde", + "thiserror", +] + +[[package]] +name = "alloy-primitives" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c715249705afa1e32be79dabfd35e2ef0f1cc02ad2cf48c9d1e20026ee637b" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more", + "hex-literal", + "itoa", + "k256", + "keccak-asm", + "proptest", + "rand", + "ruint", + "serde", + "tiny-keccak", +] + +[[package]] +name = "alloy-provider" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-network", + "alloy-primitives", + "alloy-rpc-client", + "alloy-rpc-types", + "alloy-rpc-types-trace", + "alloy-transport", + "alloy-transport-http", + "async-stream", + "async-trait", + "auto_impl", + "dashmap", + "futures", + "lru", + "reqwest 0.12.4", + "serde_json", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d58d9f5da7b40e9bfff0b7e7816700be4019db97d4b6359fe7f94a9e22e42ac" +dependencies = [ + "alloy-rlp-derive", + "arrayvec", + "bytes", +] + +[[package]] +name = "alloy-rlp-derive" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a047897373be4bbb0224c1afdabca92648dc57a9c9ef6e7b0be3aff7a859c83" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "alloy-rpc-client" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-transport", + "alloy-transport-http", + "futures", + "pin-project", + "reqwest 0.12.4", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower", + "tracing", + "url", +] + +[[package]] +name = "alloy-rpc-types" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-sol-types", + "itertools 0.12.1", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-rpc-types-trace" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types", + "alloy-serde", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-serde" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-signer" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "async-trait", + "auto_impl", + "elliptic-curve", + "k256", + "thiserror", +] + +[[package]] +name = "alloy-signer-wallet" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-network", + "alloy-primitives", + "alloy-signer", + "async-trait", + "k256", + "rand", + "thiserror", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef9a94a27345fb31e3fcb5f5e9f592bb4847493b07fa1e47dd9fde2222f2e28" +dependencies = [ + "alloy-json-abi", + "alloy-sol-macro-input", + "const-hex", + "heck 0.4.1", + "indexmap 2.2.6", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.60", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31fe73cd259527e24dc2dbfe64bc95e5ddfcd2b2731f670a11ff72b2be2c25b" +dependencies = [ + "alloy-json-abi", + "const-hex", + "dunce", + "heck 0.5.0", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.60", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c8d6e74e4feeaa2bcfdecfd3da247ab53c67bd654ba1907270c32e02b142331" +dependencies = [ + "winnow 0.6.7", +] + +[[package]] +name = "alloy-sol-types" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afaffed78bfb17526375754931e045f96018aa810844b29c7aef823266dd4b4b" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "const-hex", + "serde", +] + +[[package]] +name = "alloy-transport" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "base64 0.22.1", + "futures-util", + "futures-utils-wasm", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "url", + "wasm-bindgen-futures", +] + +[[package]] +name = "alloy-transport-http" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-transport", + "reqwest 0.12.4", + "serde_json", + "tower", + "url", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anstream" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.4", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.4", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.4", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.4", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.4", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "array-macro" +version = "2.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "220a2c618ab466efe41d0eace94dfeff1c35e3aa47891bdb95e1c0fefffd3c99" + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "async-trait" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "auto_impl" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "autocfg" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" + +[[package]] +name = "axum" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1236b4b292f6c4d6dc34604bb5120d85c3fe1d1aa596bd5cc52ca054d13e7b9e" +dependencies = [ + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.3.1", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "backtrace" +version = "0.3.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "serde", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[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 = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + +[[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 = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "blake3" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "rayon", +] + +[[package]] +name = "blake3-zkvm" +version = "0.1.0" +source = "git+https://github.com/sp1-patches/BLAKE3.git?branch=patch-blake3_zkvm/v.1.0.0#bac2d59f9122b07a4d91475560b4c3214ae62444" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "bls12_381" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c196a77437e7cc2fb515ce413a6401291578b5afc8ecb29a3c7ab957f05941" +dependencies = [ + "ff 0.12.1", + "group 0.12.1", + "pairing", + "rand_core", + "subtle", +] + +[[package]] +name = "blst" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +dependencies = [ + "serde", +] + +[[package]] +name = "c-kzg" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3130f3d8717cc02e668a896af24984d5d5d4e8bf12e278e982e0f1bd88a0f9af" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "serde", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.22", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.96" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "065a29261d53ba54260972629f9ca6bffa69bac13cd1fed61420f7fa68b9f8bd" +dependencies = [ + "jobserver", + "libc", + "once_cell", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.5", +] + +[[package]] +name = "clap" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.1", +] + +[[package]] +name = "clap_derive" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-hex" +version = "1.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ba00838774b4ab0233e355d26710fbfc8327a05c017f6dc4873f876d1f79f78" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "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 0.14.7", + "typenum", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "fiat-crypto", + "platforms", + "rustc_version 0.4.0", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.60", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.0", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + +[[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 = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "either" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[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 0.10.7", + "ff 0.13.0", + "generic-array 0.14.7", + "group 0.13.0", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-as-inner" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "byteorder", + "ff_derive", + "rand_core", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" +dependencies = [ + "addchain", + "cfg-if", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38793c55593b33412e3ae40c2c9781ffaa6f438f6f8c10f24e71846fbd7ae01e" + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "futures-utils-wasm" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[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 = "generic-array" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe739944a5406424e080edccb6add95685130b9f160d5407c639c7df0c5836b0" +dependencies = [ + "serde", + "typenum", +] + +[[package]] +name = "getrandom" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "git2" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70" +dependencies = [ + "bitflags 2.5.0", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff 0.12.1", + "memuse", + "rand_core", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.0", + "rand_core", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 1.1.0", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "halo2" +version = "0.1.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a23c779b38253fe1538102da44ad5bd5378495a61d2c4ee18d64eaa61ae5995" +dependencies = [ + "halo2_proofs", +] + +[[package]] +name = "halo2_proofs" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e925780549adee8364c7f2b685c753f6f3df23bde520c67416e93bf615933760" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "pasta_curves 0.4.1", + "rand_core", + "rayon", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hickory-proto" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.4.0", + "ipnet", + "once_cell", + "rand", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand", + "resolv-conf", + "smallvec", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +dependencies = [ + "bytes", + "futures-core", + "http 1.1.0", + "http-body 1.0.0", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.4", + "http 1.1.0", + "http-body 1.0.0", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.28", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.28", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.3.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "hyper 1.3.1", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[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 = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", + "serde", +] + +[[package]] +name = "indicatif" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2", + "widestring", + "windows-sys 0.48.0", + "winreg 0.50.0", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jubjub" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a575df5f985fe1cd5b2b05664ff6accfc46559032b954529fd225a2168d27b0f" +dependencies = [ + "bitvec", + "bls12_381", + "ff 0.12.1", + "group 0.12.1", + "rand_core", + "subtle", +] + +[[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 = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keccak-asm" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb8515fff80ed850aea4a1595f2e519c003e2a00a82fe168ebf5269196caf444" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin 0.5.2", +] + +[[package]] +name = "libc" +version = "0.2.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" + +[[package]] +name = "libgit2-sys" +version = "0.16.2+1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.5.0", + "libc", +] + +[[package]] +name = "libz-sys" +version = "1.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "memuse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3135b08af27d103b0a51f2ae0f8632117b7b185ccf931445affa8df530576a41" +dependencies = [ + "num-bigint 0.4.4", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[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.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint 0.4.4", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "openssl" +version = "0.10.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +dependencies = [ + "bitflags 2.5.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p3-air" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-field", + "p3-matrix", +] + +[[package]] +name = "p3-baby-bear" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "num-bigint 0.4.4", + "p3-field", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand", + "serde", +] + +[[package]] +name = "p3-blake3" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "blake3", + "p3-symmetric", +] + +[[package]] +name = "p3-bn254-fr" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "ff 0.13.0", + "num-bigint 0.4.4", + "p3-field", + "p3-poseidon2", + "p3-symmetric", + "rand", + "serde", +] + +[[package]] +name = "p3-challenger" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-field", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-commit" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-challenger", + "p3-field", + "p3-matrix", + "p3-util", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "num-bigint 0.4.4", + "num-traits", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-fri" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-interpolation", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-interpolation" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-util", +] + +[[package]] +name = "p3-keccak" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-symmetric", + "tiny-keccak", +] + +[[package]] +name = "p3-keccak-air" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "p3-air", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-matrix" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand", + "serde", + "tracing", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "rayon", +] + +[[package]] +name = "p3-mds" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand", +] + +[[package]] +name = "p3-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-commit", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-poseidon2" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "gcd", + "p3-field", + "p3-mds", + "p3-symmetric", + "rand", +] + +[[package]] +name = "p3-symmetric" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "serde", +] + +[[package]] +name = "p3-uni-stark" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "itertools 0.12.1", + "p3-air", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-util" +version = "0.1.0" +source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" +dependencies = [ + "serde", +] + +[[package]] +name = "pairing" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135590d8bdba2b31346f9cd1fb2a912329f5135e832a4f422942eb6ead8b6b3b" +dependencies = [ + "group 0.12.1", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking_lot" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.5", +] + +[[package]] +name = "pasta_curves" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc65faf8e7313b4b1fbaa9f7ca917a0eed499a9663be71477f87993604341d8" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "lazy_static", + "rand", + "static_assertions", + "subtle", +] + +[[package]] +name = "pasta_curves" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095" +dependencies = [ + "blake2b_simd", + "ff 0.13.0", + "group 0.13.0", + "lazy_static", + "rand", + "static_assertions", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "platforms" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" + +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.5.0", + "lazy_static", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax 0.8.3", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "prost" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f5d036824e4761737860779c906171497f6d55681139d8312388f8fe398922" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19de2de2a00075bf566bee3bd4db014b11587e84184d3f7a791bc17f1a8e9e48" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "prost-types" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3235c33eb02c1f1e212abdbe34c78b264b038fb58ca612664343271e36e55ffe" +dependencies = [ + "prost", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[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 = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rayon-scan" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f87cc11a0140b4b0da0ffc889885760c61b13672d80a908920b2c0df078fa14" +dependencies = [ + "rayon", +] + +[[package]] +name = "redox_syscall" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +dependencies = [ + "bitflags 2.5.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.6", + "regex-syntax 0.8.3", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.3", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "hickory-resolver", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", + "hyper-rustls", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", + "winreg 0.50.0", +] + +[[package]] +name = "reqwest" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.3.1", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 2.1.2", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg 0.52.0", +] + +[[package]] +name = "reqwest-middleware" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a735987236a8e238bf0296c7e351b999c188ccc11477f311b82b55c93984216" +dependencies = [ + "anyhow", + "async-trait", + "http 0.2.12", + "reqwest 0.11.27", + "serde", + "task-local-extensions", + "thiserror", +] + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin 0.9.8", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "git+https://github.com/GregAC/rrs.git#b23afc16b4e6a1fb5c4a73eb1e337e9400816507" +dependencies = [ + "downcast-rs", + "num_enum", + "paste", +] + +[[package]] +name = "ruint" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f308135fef9fc398342da5472ce7c484529df23743fb7c734e0f3d472971e62" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp", + "num-bigint 0.4.4", + "num-traits", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f86854cf50259291520509879a5c294c3c9a4c334e9ff65071c51e42ef1e2343" + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.22", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "beb461507cee2c2ff151784c52762cf4d9ff6a61f3e80968600ed24fa837fa54" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "scale-info" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" +dependencies = [ + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scc" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec96560eea317a9cc4e0bb1f6a2c93c09a19b8c4fc5cb3fcc0ec1c094cd783e2" +dependencies = [ + "sdd", +] + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sdd" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84345e4c9bd703274a082fb80caaa99b7612be48dfaa1dd9266577ec412309d" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.7", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.200" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.200" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "serde_json" +version = "1.0.116" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.6", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "serial_test" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" +dependencies = [ + "futures", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sha3-asm" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bac61da6b35ad76b195eb4771210f947734321a8d81d7738e1580d953bc7a15e" +dependencies = [ + "cc", + "cfg-if", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core", +] + +[[package]] +name = "size" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fed904c7fb2856d868b92464fc8fa597fce366edea1a9cbfaa8cb5fe080bd6d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[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 = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "sp1-aggregation-example-script" +version = "0.1.0" +dependencies = [ + "hex", + "sp1-helper", + "sp1-sdk", + "tracing", +] + +[[package]] +name = "sp1-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "arrayref", + "bincode", + "blake3", + "blake3-zkvm", + "cfg-if", + "curve25519-dalek", + "elf", + "elliptic-curve", + "generic-array 1.0.0", + "hex", + "itertools 0.12.1", + "k256", + "log", + "nohash-hasher", + "num", + "num_cpus", + "p3-air", + "p3-baby-bear", + "p3-blake3", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-keccak", + "p3-keccak-air", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-uni-stark", + "p3-util", + "rayon-scan", + "rrs-lib", + "serde", + "serde_with", + "serial_test", + "size", + "snowbridge-amcl", + "sp1-derive", + "sp1-primitives", + "strum", + "strum_macros", + "tempfile", + "tracing", + "tracing-forest", + "tracing-subscriber", + "typenum", + "web-time", +] + +[[package]] +name = "sp1-derive" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sp1-helper" +version = "0.1.0" +dependencies = [ + "cargo_metadata", + "chrono", +] + +[[package]] +name = "sp1-primitives" +version = "0.1.0" +dependencies = [ + "itertools 0.12.1", + "lazy_static", + "p3-baby-bear", + "p3-field", + "p3-poseidon2", + "p3-symmetric", +] + +[[package]] +name = "sp1-prover" +version = "0.1.0" +dependencies = [ + "anyhow", + "backtrace", + "bincode", + "clap", + "dirs", + "futures", + "hex", + "indicatif", + "itertools 0.12.1", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-field", + "rayon", + "reqwest 0.11.27", + "serde", + "serde_json", + "serial_test", + "sha2", + "size", + "sp1-core", + "sp1-primitives", + "sp1-recursion-circuit", + "sp1-recursion-compiler", + "sp1-recursion-core", + "sp1-recursion-gnark-ffi", + "sp1-recursion-program", + "subtle-encoding", + "tempfile", + "tokio", + "tracing", + "tracing-appender", + "tracing-subscriber", +] + +[[package]] +name = "sp1-recursion-circuit" +version = "0.1.0" +dependencies = [ + "bincode", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-commit", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-util", + "serde", + "sp1-core", + "sp1-recursion-compiler", + "sp1-recursion-core", + "sp1-recursion-derive", + "sp1-recursion-program", +] + +[[package]] +name = "sp1-recursion-compiler" +version = "0.1.0" +dependencies = [ + "backtrace", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-commit", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-poseidon2", + "p3-symmetric", + "p3-util", + "serde", + "serde_json", + "serial_test", + "sp1-core", + "sp1-recursion-core", + "sp1-recursion-derive", + "tracing", +] + +[[package]] +name = "sp1-recursion-core" +version = "0.1.0" +dependencies = [ + "arrayref", + "backtrace", + "ff 0.13.0", + "hashbrown 0.14.5", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "serde", + "serde_with", + "sp1-core", + "sp1-derive", + "sp1-primitives", + "static_assertions", + "tracing", + "zkhash", +] + +[[package]] +name = "sp1-recursion-derive" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sp1-recursion-gnark-ffi" +version = "0.1.0" +dependencies = [ + "crossbeam", + "log", + "p3-field", + "rand", + "reqwest 0.11.27", + "serde", + "serde_json", + "sp1-recursion-compiler", + "subtle-encoding", + "tempfile", +] + +[[package]] +name = "sp1-recursion-program" +version = "0.1.0" +dependencies = [ + "array-macro", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-util", + "rand", + "serde", + "sp1-core", + "sp1-recursion-compiler", + "sp1-recursion-core", + "tracing", +] + +[[package]] +name = "sp1-sdk" +version = "0.1.0" +dependencies = [ + "alloy", + "anyhow", + "async-trait", + "axum", + "bincode", + "dirs", + "dotenv", + "futures", + "hex", + "indicatif", + "log", + "p3-commit", + "p3-field", + "p3-matrix", + "prost", + "prost-types", + "reqwest 0.11.27", + "reqwest-middleware", + "serde", + "serde_json", + "sha2", + "sp1-core", + "sp1-prover", + "tempfile", + "tokio", + "tracing", + "twirp", + "vergen", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" + +[[package]] +name = "strum_macros" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.60", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[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.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn-solidity" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70aba06097b6eda3c15f6eebab8a6339e121475bcf08bbe6758807e716c372a1" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "task-local-extensions" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" +dependencies = [ + "pin-utils", +] + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "thiserror" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror", + "time", + "tracing-subscriber", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-forest" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" +dependencies = [ + "ansi_term", + "smallvec", + "thiserror", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "twirp" +version = "0.3.0" +source = "git+https://github.com/github/twirp-rs.git?rev=93d4e4b#93d4e4b4a48f9112c943d2925e8dbb1106bd6a18" +dependencies = [ + "async-trait", + "axum", + "bytes", + "futures", + "http 1.1.0", + "http-body-util", + "hyper 1.3.1", + "prost", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "url", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna 0.5.0", + "percent-encoding", +] + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vergen" +version = "8.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" +dependencies = [ + "anyhow", + "cfg-if", + "git2", + "rustversion", + "time", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.60", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14b9415ee827af173ebb3f15f9083df5a122eb93572ec28741fb153356ea2578" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.60", +] + +[[package]] +name = "zkhash" +version = "0.2.0" +source = "git+https://github.com/HorizenLabs/poseidon2#bb476b9ca38198cf5092487283c8b8c5d4317c4e" +dependencies = [ + "ark-ff 0.4.2", + "ark-std 0.4.0", + "bitvec", + "blake2", + "bls12_381", + "byteorder", + "cfg-if", + "group 0.12.1", + "group 0.13.0", + "halo2", + "hex", + "jubjub", + "lazy_static", + "pasta_curves 0.5.1", + "rand", + "serde", + "sha2", + "sha3", + "subtle", +] diff --git a/examples/aggregation/script/Cargo.toml b/examples/aggregation/script/Cargo.toml new file mode 100644 index 0000000000..edd7eddec0 --- /dev/null +++ b/examples/aggregation/script/Cargo.toml @@ -0,0 +1,13 @@ +[package] +version = "0.1.0" +name = "sp1-aggregation-example-script" +edition = "2021" +default-run = "sp1-aggregation-example-script" + +[dependencies] +hex = "0.4.3" +sp1-sdk = { path = "../../../sdk" } +tracing = "0.1.40" + +[build-dependencies] +sp1-helper = { path = "../../../helper" } \ No newline at end of file diff --git a/examples/aggregation/script/build.rs b/examples/aggregation/script/build.rs new file mode 100644 index 0000000000..4717ffebf9 --- /dev/null +++ b/examples/aggregation/script/build.rs @@ -0,0 +1,10 @@ +fn main() { + sp1_helper::build_program(&format!( + "{}/../programs/aggregation", + env!("CARGO_MANIFEST_DIR") + )); + sp1_helper::build_program(&format!( + "{}/../programs/fibonacci", + env!("CARGO_MANIFEST_DIR") + )); +} diff --git a/examples/aggregation/script/rust-toolchain b/examples/aggregation/script/rust-toolchain new file mode 100644 index 0000000000..3a306210c9 --- /dev/null +++ b/examples/aggregation/script/rust-toolchain @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2024-04-17" +components = ["llvm-tools", "rustc-dev"] \ No newline at end of file diff --git a/examples/aggregation/script/src/main.rs b/examples/aggregation/script/src/main.rs new file mode 100644 index 0000000000..7f48d90ed1 --- /dev/null +++ b/examples/aggregation/script/src/main.rs @@ -0,0 +1,101 @@ +//! A simple example showing how to aggregate proofs of multiple programs with SP1. + +use sp1_sdk::{HashableKey, ProverClient, SP1CompressedProof, SP1Stdin, SP1VerifyingKey}; + +/// A program that aggregates the proofs of the simple program. +const AGGREGATION_ELF: &[u8] = + include_bytes!("../../programs/aggregation/elf/riscv32im-succinct-zkvm-elf"); + +/// A program that just runs a simple computation. +const FIBONACCI_ELF: &[u8] = + include_bytes!("../../programs/fibonacci/elf/riscv32im-succinct-zkvm-elf"); + +/// An input to the aggregation program. +/// +/// Consists of a proof and a verification key. +struct AggregationInput { + pub proof: SP1CompressedProof, + pub vk: SP1VerifyingKey, +} + +fn main() { + // Setup the logger. + sp1_sdk::utils::setup_logger(); + + // Initialize the proving client. + let client = ProverClient::new(); + + // Setup the proving and verifying keys. + let (aggregation_pk, _) = client.setup(AGGREGATION_ELF); + let (fibonacci_pk, fibonacci_vk) = client.setup(FIBONACCI_ELF); + + // Generate the fibonacci proofs. + let proof_1 = tracing::info_span!("generate fibonacci proof n=10").in_scope(|| { + let mut stdin = SP1Stdin::new(); + stdin.write(&10); + client + .prove_compressed(&fibonacci_pk, stdin) + .expect("proving failed") + }); + let proof_2 = tracing::info_span!("generate fibonacci proof n=20").in_scope(|| { + let mut stdin = SP1Stdin::new(); + stdin.write(&20); + client + .prove_compressed(&fibonacci_pk, stdin) + .expect("proving failed") + }); + let proof_3 = tracing::info_span!("generate fibonacci proof n=30").in_scope(|| { + let mut stdin = SP1Stdin::new(); + stdin.write(&30); + client + .prove_compressed(&fibonacci_pk, stdin) + .expect("proving failed") + }); + + // Setup the inputs to the aggregation program. + let input_1 = AggregationInput { + proof: proof_1, + vk: fibonacci_vk.clone(), + }; + let input_2 = AggregationInput { + proof: proof_2, + vk: fibonacci_vk.clone(), + }; + let input_3 = AggregationInput { + proof: proof_3, + vk: fibonacci_vk.clone(), + }; + let inputs = vec![input_1, input_2, input_3]; + + // Aggregate the proofs. + tracing::info_span!("aggregate the proofs").in_scope(|| { + let mut stdin = SP1Stdin::new(); + + // Write the verification keys. + let vkeys = inputs + .iter() + .map(|input| input.vk.hash_u32()) + .collect::>(); + stdin.write::>(&vkeys); + + // Write the public values. + let public_values = inputs + .iter() + .map(|input| input.proof.public_values.to_vec()) + .collect::>(); + stdin.write::>>(&public_values); + + // Write the proofs. + // + // Note: this data will not actually be read by the aggregation program, instead it will be + // witnessed by the prover during the recursive aggregation process inside SP1 itself. + for input in inputs { + stdin.write_proof(input.proof.proof, input.vk.vk); + } + + // Generate the groth16 proof. + client + .prove_groth16(&aggregation_pk, stdin) + .expect("proving failed"); + }); +} diff --git a/examples/chess/program/elf/riscv32im-succinct-zkvm-elf b/examples/chess/program/elf/riscv32im-succinct-zkvm-elf index 1a6eeeda163da57f70f8a0d1a9cdd557984cf4d8..d970ae1b6126e3526f5ac31648ea45f79f336136 100755 GIT binary patch delta 18333 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¨SY7YQn!47{BdKn(7lcAyIKn~EHz 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 delta 18131 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 Yg|r-1#;G<@`1cXKjK~jOL!{?_0rUYtIRF3v diff --git a/examples/chess/script/Cargo.lock b/examples/chess/script/Cargo.lock index b4af71b104..77b4ebb333 100644 --- a/examples/chess/script/Cargo.lock +++ b/examples/chess/script/Cargo.lock @@ -726,7 +726,7 @@ dependencies = [ "http 1.1.0", "http-body 1.0.0", "http-body-util", - "hyper 1.2.0", + "hyper 1.3.1", "hyper-util", "itoa", "matchit", @@ -1007,6 +1007,10 @@ name = "cc" version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2678b2e3449475e95b0aa6f9b506a28e61b3dc8996592b983695e8ebb58a8b41" +dependencies = [ + "jobserver", + "libc", +] [[package]] name = "cfg-if" @@ -1150,6 +1154,19 @@ dependencies = [ "libc", ] +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + [[package]] name = "crossbeam-channel" version = "0.5.12" @@ -1178,6 +1195,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.19" @@ -1358,6 +1384,27 @@ dependencies = [ "subtle", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + [[package]] name = "dotenv" version = "0.15.0" @@ -1714,6 +1761,19 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "git2" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70" +dependencies = [ + "bitflags 2.5.0", + "libc", + "libgit2-sys", + "log", + "url", +] + [[package]] name = "glob" version = "0.3.1" @@ -2012,9 +2072,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186548d73ac615b32a73aafe38fb4f56c0d340e110e5a200bcadbaf2e199263a" +checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" dependencies = [ "bytes", "futures-channel", @@ -2066,7 +2126,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.2.0", + "hyper 1.3.1", "hyper-util", "native-tls", "tokio", @@ -2085,7 +2145,7 @@ dependencies = [ "futures-util", "http 1.1.0", "http-body 1.0.0", - "hyper 1.2.0", + "hyper 1.3.1", "pin-project-lite", "socket2", "tokio", @@ -2249,6 +2309,15 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.69" @@ -2320,12 +2389,46 @@ version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +[[package]] +name = "libgit2-sys" +version = "0.16.2+1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + [[package]] name = "libm" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.5.0", + "libc", +] + +[[package]] +name = "libz-sys" +version = "1.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -2599,6 +2702,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + [[package]] name = "number_prefix" version = "0.4.0" @@ -2664,6 +2776,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "overload" version = "0.1.1" @@ -3313,6 +3431,17 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + [[package]] name = "regex" version = "1.10.4" @@ -3394,10 +3523,12 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls", + "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", "webpki-roots", "winreg 0.50.0", @@ -3416,7 +3547,7 @@ dependencies = [ "http 1.1.0", "http-body 1.0.0", "http-body-util", - "hyper 1.2.0", + "hyper 1.3.1", "hyper-tls 0.6.0", "hyper-util", "ipnet", @@ -3680,6 +3811,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "scc" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ad2bbb0ae5100a07b7a6f2ed7ab5fd0045551a4c507989b7a620046ea3efdc" +dependencies = [ + "sdd", +] + [[package]] name = "schannel" version = "0.1.23" @@ -3705,6 +3845,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "sdd" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84345e4c9bd703274a082fb80caaa99b7612be48dfaa1dd9266577ec412309d" + [[package]] name = "sec1" version = "0.7.3" @@ -3854,23 +4000,23 @@ dependencies = [ [[package]] name = "serial_test" -version = "3.0.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ad9342b3aaca7cb43c45c097dd008d4907070394bd0751a0aa8817e5a018d" +checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" dependencies = [ - "dashmap", "futures", - "lazy_static", "log", + "once_cell", "parking_lot", + "scc", "serial_test_derive", ] [[package]] name = "serial_test_derive" -version = "3.0.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93fb4adc70021ac1b47f7d45e8cc4169baaa7ea58483bc5b721d19a26202212" +checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" dependencies = [ "proc-macro2", "quote", @@ -4019,6 +4165,7 @@ dependencies = [ "rrs-lib", "serde", "serde_with", + "serial_test", "size", "snowbridge-amcl", "sp1-derive", @@ -4070,7 +4217,10 @@ dependencies = [ "backtrace", "bincode", "clap", + "dirs", + "futures", "hex", + "indicatif", "itertools 0.12.1", "p3-baby-bear", "p3-bn254-fr", @@ -4078,8 +4228,10 @@ dependencies = [ "p3-commit", "p3-field", "rayon", + "reqwest 0.11.27", "serde", "serde_json", + "serial_test", "sha2", "size", "sp1-core", @@ -4089,6 +4241,9 @@ dependencies = [ "sp1-recursion-core", "sp1-recursion-gnark-ffi", "sp1-recursion-program", + "subtle-encoding", + "tempfile", + "tokio", "tracing", "tracing-appender", "tracing-subscriber", @@ -4186,10 +4341,15 @@ dependencies = [ name = "sp1-recursion-gnark-ffi" version = "0.1.0" dependencies = [ + "crossbeam", + "log", "p3-field", + "rand", + "reqwest 0.11.27", "serde", "serde_json", "sp1-recursion-compiler", + "subtle-encoding", "tempfile", ] @@ -4228,6 +4388,7 @@ dependencies = [ "async-trait", "axum", "bincode", + "dirs", "dotenv", "futures", "hex", @@ -4245,9 +4406,11 @@ dependencies = [ "sha2", "sp1-core", "sp1-prover", + "tempfile", "tokio", "tracing", "twirp", + "vergen", ] [[package]] @@ -4315,6 +4478,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + [[package]] name = "syn" version = "1.0.109" @@ -4450,7 +4622,9 @@ checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", + "libc", "num-conv", + "num_threads", "powerfmt", "serde", "time-core", @@ -4725,7 +4899,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "twirp" version = "0.3.0" -source = "git+https://github.com/github/twirp-rs.git#90244e417d27bf9233e96de37bbab8121e983020" +source = "git+https://github.com/github/twirp-rs.git?rev=93d4e4b#93d4e4b4a48f9112c943d2925e8dbb1106bd6a18" dependencies = [ "async-trait", "axum", @@ -4733,7 +4907,7 @@ dependencies = [ "futures", "http 1.1.0", "http-body-util", - "hyper 1.2.0", + "hyper 1.3.1", "prost", "reqwest 0.11.27", "serde", @@ -4845,6 +5019,19 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vergen" +version = "8.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" +dependencies = [ + "anyhow", + "cfg-if", + "git2", + "rustversion", + "time", +] + [[package]] name = "version_check" version = "0.9.4" @@ -4941,6 +5128,19 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.69" diff --git a/examples/chess/script/Cargo.toml b/examples/chess/script/Cargo.toml index 81e499e730..55b05bcdcd 100644 --- a/examples/chess/script/Cargo.toml +++ b/examples/chess/script/Cargo.toml @@ -1,4 +1,3 @@ -[workspace] [package] version = "0.1.0" name = "chess-script" diff --git a/examples/chess/script/build.rs b/examples/chess/script/build.rs index 32b99273cd..03388acab7 100644 --- a/examples/chess/script/build.rs +++ b/examples/chess/script/build.rs @@ -1,5 +1,3 @@ -use sp1_helper::build_program; - fn main() { - build_program("../program") + sp1_helper::build_program(&format!("{}/../program", env!("CARGO_MANIFEST_DIR"))); } diff --git a/examples/cycle-tracking/program/elf/riscv32im-succinct-zkvm-elf b/examples/cycle-tracking/program/elf/riscv32im-succinct-zkvm-elf index 9e132423e8998635ca19fbe77661e95630548875..a4ae61cdd9a69749f561ead3dd9b7ab65d87cc20 100755 GIT binary patch delta 14122 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 T%}U)aQ?eiL73zg|snGQ=WDGz_ diff --git a/examples/cycle-tracking/script/Cargo.toml b/examples/cycle-tracking/script/Cargo.toml index 750884df2c..2aac9c1e6b 100644 --- a/examples/cycle-tracking/script/Cargo.toml +++ b/examples/cycle-tracking/script/Cargo.toml @@ -1,4 +1,3 @@ -[workspace] [package] version = "0.1.0" name = "cycle-tracking-script" diff --git a/examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf b/examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf index afa038f1023b30673b2e9163f24253dec6c7d17b..32af584b38b3f41a5d659931a1190a0f1b2a3946 100755 GIT binary patch delta 7097 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 delta 8547 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 diff --git a/examples/io/script/Cargo.toml b/examples/io/script/Cargo.toml index 241e3da49f..18f02b7af8 100644 --- a/examples/io/script/Cargo.toml +++ b/examples/io/script/Cargo.toml @@ -1,4 +1,3 @@ -[workspace] [package] version = "0.1.0" name = "io-script" diff --git a/examples/io/script/build.rs b/examples/io/script/build.rs index 32b99273cd..03388acab7 100644 --- a/examples/io/script/build.rs +++ b/examples/io/script/build.rs @@ -1,5 +1,3 @@ -use sp1_helper::build_program; - fn main() { - build_program("../program") + sp1_helper::build_program(&format!("{}/../program", env!("CARGO_MANIFEST_DIR"))); } diff --git a/examples/io/script/src/main.rs b/examples/io/script/src/main.rs index 445b8f47ba..58389008f7 100644 --- a/examples/io/script/src/main.rs +++ b/examples/io/script/src/main.rs @@ -13,7 +13,7 @@ struct MyPointUnaligned { fn main() { // Setup a tracer for logging. - utils::setup_tracer(); + utils::setup_logger(); // Create an input stream. let mut stdin = SP1Stdin::new(); diff --git a/examples/is-prime/script/Cargo.toml b/examples/is-prime/script/Cargo.toml index 645722a150..b47b84cbb0 100644 --- a/examples/is-prime/script/Cargo.toml +++ b/examples/is-prime/script/Cargo.toml @@ -1,4 +1,3 @@ -[workspace] [package] version = "0.1.0" name = "is-prime-script" diff --git a/examples/is-prime/script/src/main.rs b/examples/is-prime/script/src/main.rs index 85ed0bc81b..6e63191450 100644 --- a/examples/is-prime/script/src/main.rs +++ b/examples/is-prime/script/src/main.rs @@ -5,7 +5,7 @@ const ELF: &[u8] = include_bytes!("../../program/elf/riscv32im-succinct-zkvm-elf fn main() { // Setup a tracer for logging. - utils::setup_tracer(); + utils::setup_logger(); let mut stdin = SP1Stdin::new(); diff --git a/examples/json/lib/Cargo.toml b/examples/json/lib/Cargo.toml index f08814b055..d85ca839f7 100644 --- a/examples/json/lib/Cargo.toml +++ b/examples/json/lib/Cargo.toml @@ -1,4 +1,3 @@ -[workspace] [package] name = "lib" version = "0.1.0" diff --git a/examples/json/program/elf/riscv32im-succinct-zkvm-elf b/examples/json/program/elf/riscv32im-succinct-zkvm-elf index c63265db17f4849a0408206c610a0371d4511a28..1a2dbcf5604836311f0ae30526bb67e5c471b429 100755 GIT binary patch delta 15045 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 delta 15056 zcmbtZ37AyHwXR#kz^J420Lq91bgQ5&4tHM^*<{ctDjLwy@PxYp1{gAcK_y<4MbJUO z0m}siBTEgIBb33nw+_!A=F7X%zt6u`f9Q&V zRSmP_J4i=C5XQ|SBsn)h>gQJN>)3V>>HKyiq-a%9&tg*4qb(`wIgixOD<<{DZAr&@ zZ8?4Rhta+xC7y7bs zlZAv($`(u(hBe`3f0`@|YP#C5rn%LyMtG*^%<7a_rRgS!>Xm$KiZEYjN`p#?q*p6+ zY~MDmE(>oKMqNqBlqCsb6G9#m2aI)7e!Z|{z z4ZOODkbd}OAI}!Vk{N*j_Z=Y+bVP~3WHw}^3Dwjtfu$92EOW(;^YG863M-KIw7+lCnNVh;L_`J za`ysPzRbg$fsX)pO7n;0do09$liSdCE(|g>PD;6+x7QKUAM^-E zk@FhxoIL)I7UEvuZ^QYGJK!K-k>js`OL1W2;b_0K2p7sKbRH#Bu`um|IH}_|`T_XM z8xyHii8jo?laP(rpmPDcf#Xo1g5%@asGY*1ga<>C3*lI9@1mJtyEsl7u$+oCR=i8- zSGIdTu6Jq94Y#wZUBbZdPK3$gQE~Da=azm0GyXhIzT`^%3wR9~fK~9v)BGVpB_;2GVJsKWc>(-1B2HHG>s*F#S`M6{ zzgG`4LxJPKA6co(QkeCo1S#kExn+br33|qDZSEpuTiykR0Urd8+?I;-`B*500GyW+ zxSK6|K{yXZ_5Bxw$HHocFatG{=l23{0nUWkUf_~2hr8X4sLA6W3yiXwwa04U(ZHFg z>3k0%V}S?Z^vGKWmczc-A7NaN6*UNDiQe}Ua^Px23TIjXJna{8GJ`v*J<}S5?m`V4 z)gaUe?bxmcVO`lp_Yoq_%4zmea_&pQK%uOD1%!>uX+YVY-9mTi&nrA2!xE<&>c?`pW zR{Piah--7Eb>x zPE0IBF1TqI>Jb>)a{=3c^G)0#+2a$TyS8{gg$f*)vKS23b2sV|aK=D` z*{=OUm{_s~1>?(HetiVo|8F_`7V|$B`q_7`g@2I=B`NW3$Y0hY;vp@KDd`Kd4g%)K zlgS(lX?4g3;5ndY0?; z3wppRsf@hzRm5T5xyK|o9l%r(p7!4`_t!Z$t^*$NKu*7I2%lNNkvXHX|1iuu@lc#B z29D0{vI}PTAA}dz<6_{&-{it%2g2eA_&ag>1Xy<{@R{lT9mt1R7!3vXae*v10VpjJws-cJzHZbgC&1CI2a1Uv#b#_@XK zS$X&y;8nO^#y{GVuv6ase+~R4Fy9}N#jl}4WF1^gJ^`-#4)YRMpywOFP$-iJ-vfV! z12YHoe-i@p6bON%15e-z?f_l`Jdop}x8PXtcTZu=hr_V27z;W4d9E6dcu1M2H=cQ*8;x+oX%QGE=g|s9%@{+=zaM7#I$oF=T7}2 zhJ@8w|wKIwC!{Rh~dBSOD~wvUkQd17V&Zv~G2 zMCv`A?C~$*2SK=p_4q+pktl_f8ES&86JpV}a-JQ#yT$3;})@Vxm*8-{jLpMPYZ`@$|FPp%Ur533%bUoNc}Xt^tPz;pBH<@*V_Ee~G}JS&fXIq>2<`bWTvfYTQ$qU0)exDD+-n0!FUad{Kr5MXb8 z?%X-RBY`tPG#kzzpNH>bql)PwL1p`k={ozv&+*|s90|gm*!Rz96i+6|2!4wi;8QoE z-hdu?;|buwn-ZiS$A^IrL3%akHxD56HzZO8IO4yN9d1iQVF#Pujt&$iuubh~KjA#K zKSGbN9wqcr;dVB?1n60|DMGVZ@iEwN0-Jjb{i^H;#I1J{tUtt`FgD!w79bmR9;FnOsu$7b{_J0q&vKns^oZh7tS==E(;vD~a zDgy7nP@Lf5X#Y*XBhF8d@tofEIt-7AM5?z%^cR8W>`E6i;E}{c;+prc1zQBq6~pMdp4}wCtV#QdjC17KcnO1AAJAh zc_`oO;$$>e;M!XWQIo)&{w{FcnmCys;Sd5U@VA|tDNfOZ);j6L)F1UaT>{$nl3q;Wu(aRR1yCNyab9@DG$&q;K3oN3~117*F_z9zh zr|-c0(l0AC+?fcL0BOOwQ+ZO9*KL7sNSz^io2~^IZ6Bggc_faeCKf z`0mWZGl5U#z(HUj6zP^bIQ&`yu?FH9e}5DVp1D5u?(v>7u>rj#UGN3vCs*6WnyVQ@Rq#vehIkZeN1lY4W#&YsP_nk zzFdLv!1>wS0G#iMGao)Wd*=er#0BH2{m9M*k3fOPF`M!mJh~d8a3?GWLq*B)KJd(q z>8G~H0`-sLM%&ZFP=vew{^)F8415r-SGj`k1D}amV@O6=FnZWZW#`3M7%?FOm{oKkCUO% z0g(5_CQN7V=E}#k&2Zs+aWV`1sqFk73+u5kkqZcu@R6J#2e^Pq@hSApx0 ztrZ-v10M0$I2q3IaoeEKNB9`z7Cra^p6U=2Q@FfyUPM@4k_yFib}oJuE#Rv-+0F%A z^coaE{h814+ZYG8;>IPwWwpk;QadX!UqV-@|*>BeTV~*MH~4I=ZpzyNYwJ1nrZQVP z-)PF(!trLSIVE!K)SAg-rqtGqtF6$We#yA z(F^pzF-=)@ZBh3XS@K=S!%`qxre7&%FIkv1Yq`d(K~u5Wh-l2)lrg;?3so#`EA zie$N_8OV<5tETAaRjglk+LxWVm6o#hHZAU8j5mGT@J!S7O)GE>S!Iuw(~7W=_{ywn z3UWqiG-QY*k7>~)O|B`0*@P-6UWy_=CBOA%%w<3e;?K=FJ(aI1`K`A7U0rCW!WNXY zRtKIG1zt*rR!3l1DMfjf+LTSW7H*q&*~qP_J+1ezlyz{nVB(yxKq|G~!E)r_3rGG; zQpZG_pq)B~`&>=MRB9zMW}1|~b_gzh8L+oL^nL>rAv@GTXl481nYG zfS9H#QsAqBq?v&zNn*5m7TeqvvI0l;#6T3WP4@!Fib#D~Q8$o$&6a&%v@G4WEzeZa zq!HcdNioZ`94XLsJMbmnSLKM*hdtPhR>TxrG#%5hMAP#`U6$CZ-ROh;bW!t6N7uX{ za5PhNt6IKubmipz-Dw}eQdCXTWGOIYU-dlI&K7xH(IqQzB*n5-Rg`Q`(-qv&l{CY) zpfD2>^piolq}i5axT@qxK6*kG8FTd|s#{a*YkqBQO|4cH{a>G2GriXJC1bqiDvqb2 z*y@Vyh_c5{JC!Cv+jcboOA{5?!Zus2L}j+r6jHY`TlAW8Rvvw`O6|uj$G$$5UK(pW zGqDk;(KE+d63p+4zUexeqf2@LC!_|gY^hRA#DH#Cs-#G2;5vb)8m6mymf|XbX6u!b z#J>K3p4DIUY+ZC@Lzl$BGE{VCO*1EqpYcmo|CKg%ygb<;Q>RE{ZusSOlPUw-v0YUZ zHAJ9=Fl2*Ir{`LTZ4W`9+oEPWlI&$IZlJxXjvrWvW#9BP9PD_mh`wiAPGI^hc{#8J5re>(BEE$r;md~Z*dyCPSt=WNX*!V70%qq^WnkM>#tl|JmMu#&s)^8pi6Z1sZ za?nQu&sA+h^O6tDqg6u8(NH>M!_Y-TL4LUGn_KBsVL|Q07PTXj{7LSlDWr8D#gg8f zpfGjMR*F!YlkignNLphF$K-5%#a4Z!F|=teU86_-WszsSM|LB#ROrk1twdvg_g6echK>y%Mv;&X5ypNFcjH$qP+1; z)_oD}6+_`MWLZ~jRq{}c0=8`jJ^3Vi;zSH%vMITuEJ?NsolVDQw=SaB^>%#A5-|$~ zx+qynU~rSE2G}vBNvepc1P7Tq>$#YUG1C`418+mF0^m(GJW<;=mK16RU!{Cb%--FRy z6dWU{ik7FdAMT`WJG%&gs4nBp3uBiFy)o5V7Q1Ev?ZGZvN{7W{(Zy~9O;W}{~?Jv3YmV-C@(&xY1~w4N_UsqX7_6uN%6hYL=e%OhE}|Cd`|WFeFuc3W|_2@qw<< zSPOQ--P9_44@vqFHCm~K+@gq3k9x&ae_AVxVOE(Y9j=uEGIgHUj^TMdvXv4t-KuHz ziQWQZhAuk@F?4Lr_K`CzaW6Gvh$!2%eNWO9ggXK*wJJG=7@$CTwu1cdjr6Lg>ge*i zfq~wZe0=$(cnw*RkwUI!TF55XW#8XR-|1!elJ0AYXiBDx>f!P{QWVXw6x~pC5tEFj zi6X0cfL@p!vYcKnob1>No*zYIv@c5ddP&8(q-$f?*kx!3JMX9W#!#dzQ&Kh6b1e@a zMQri|^nqAlII1cI9`@l|#x_{R3VMHg)wCqvl<@g4x}I;b0W0Z9RzwRe!gyr zlByeOMDb&;qT9$$%zGAe5KZ>vN;)c(TwC^3&(Y8-9Lte;1uPum+3waf#9NtY(Ew7O z8nl{Alh{-AB=+QkbblXPM_)k~lT@^iz>~5?tLe$?x!=;O`iP2c;nTxGS&{Mi@BP?@ zs)y*=t;og}GpV&zrR7}I2|Mx-z2WE48-^38Dry#9A}l;~v@Xqmq}C)GR?&-T;pR@@>q>z4d`h|O+4B2QJN6g$E)eEFy+XCBSEIf{^$B+f~=8*@F&bAnL^!2 z#7~frDbzU$7yi`YDAUAqA~F)#qQ~gZ!-8)Z5^v%%{$NHF6-ibk-Lf!bq=T`r1fCPk zNl5#%pa_{ev^f!}h$tu_GXyk}&?dS^s_Qv;atc(8RjQ0er&z4d<8)Z>K=C~lqn>1# zl4aq^G@ag!q(nm4eUH;|9h)PZxRwrJE4I*M*{pS#DerxX8tk^U^jo%W9qrk_;44F> zC~2xDMsItfjQqs+iGNf_9Smam`(1?FM>D%oj09V@S90f+XpR$V#7}*M*X$L#H6Xhl!`)tq|{1(`qZZ zEX9y5Raa!yvJ^wqG1e;S(7~6Q;pn<1`7{-!8K>?hn}RHd+Vy~x>jKOisvF1GA&fYmy0N2D8LIl zzRg5MvsjlJ>YkhqnC8gBCVEy_@L@>iWuzGiX(JYvz{^N;64LosSOhNu&520mUttNn z5H*s}CS@pfGd;hzYe6tdS-Tr5LlDICWMfX7()!<3`c98&6@7>iQBZjp50s}UUv>BF%mjkp`}_OhWU8vGtE#K3 zubSSv6HB}&7T@iyOc#`M4`XM%R3^)ajmy#>h#XJ`Mwa=~gt&8&$}3tW z4`}9@;u-LDavXbh;Lj!9BMC@C#zzW#N!`fxh2ajKh*ZU%ex-OEdsm8Y@Jp2*zr59x znLgYD3C%pmL(%Ld>3h6>uUCMRw=22D`dyUPFV|e-mx9P+u?NyAoo7ALd63RKCFJoK zPa=QaoK9(y{Zx`TUtAXPB!AVE{yoK!bV;oxp~|0emqMtCloYv3T_BLFmp8d)3>nI6 zEFS8Y(mgXgo@Rcj*pu0AkH^qyE!r@S510C-0x#k(@k>cAyguBKnBkl7a%N<6lg#0# zM{ulkHFC$&L78I{NBX5|Z%iky!+?_KQrYq)A=ENb(&|28Z!@Uu+pJw=TuO>}cw~OcEFmODPNoDSs{)rt zzHT)v5)EVv!84H)fdQ9z{iOcfSAh*@XVic3XCxR#&#-x7i zof|1=-OGDNWP0lhEU`T8YO2+eEbU%@IMI`tYu*zXmv)C&-}XsbXRi?25{XY=EkvJS zLVAD+IpD!aecS8g`g7-whl2myR+2G^STiJh4 zcfqS&@M!iG4S1)LT${It1CSDugvxL7T4crTz?PDap)^ue;>}d%zH^hy!=m_ zo09vQHyqiYd!uiOK?7IVTpTHAUwGX#+Vqhyna*5bsa_r-WnMpxAuQGeADNxtiE?Mw z?#s+uhxSVFWah8K-s}}(PM(>*PRPvQ?-8QkAKBf$u=mV{oXuGg5~Q5HoO7s>amIMz zCt82jQ^RI4efpP@l1M>bnyP)uDv-^kkRjNP7O|)Owj45m%buuLGsa)+(1|lgiHD)SzET34TH<;|3GiPds90DXZUvIr{|a zClnru^74Ka|E|x!f%1w-`1gno`2iA%5D^!dx677@h?GQQChxZR^n09>^$BJ&-(zi)}Z^5=*i<^19JtO+Ka8x3rhHc-yL_j|%wG<-T)Q^vcY6UWgEM<*k>{ z*1O^>k<=H`wjz2Fmxu(pL`2(GcKdb6>&-pU;zAiHt-}8Qqy+4tekMHT;IE#KgmKQSH zHIKb-!16+7&TzrPKZ)gq%)C9Z_l;PdDkWy7KQ9_z2Uw*~Arp~xWL?t>zo8u~yn5UG z%J1R?{c5Q0LOO0+xngc}uNi5wv5kr|ks36DTr(!pWn&-bb!=q8#tfu+d}HSdX+O>r z1dIc5nHls+XErFq$J9lO-^k2Iefi%tnR)MH_@_GKyy7D&j&4#LSby)!Y=^iE8j&h3 zn7NtOACYQqE<_%FrRH_|j3_mG{Za_!3VAXk!=LJ{k~bM%4!;>$^;CwSzZKd2R3|~& zAE|#T&@}u`X8s-zBap%eAfb(%)YIJRs`zcE;_{d0+;- z4U5!1liBvy8JLu$vy_!#Sj0c;{83uKmG=N zvZwg{#nDwo;(OjcP+KIXAkoECzqGgb)Zd_w^%idnSe8zwmJX)6Ee+HAhjcQH4a56iZP0rGBG8XdzaiF-Z zRUbcXV5X>N=l|5eX9kKd{~u~Otcm~rKakfI|DU+;yHfla?O9jK{TNlx%yap1-5@cE zHYU|Efi|XRR)fY&82o>-*s;OlZ+}ypc$N4sRFw@qI0I^D^*NLFMYMl5zUR1vJA9RR zm!OwGS&5h==vTq~67k&MaIe1lZ!3=u6^~!Mv{5@u#5v8yEu{<>f1u8Q@r4`e=>Oyl z-LDbfyP5?GtJwRr7_I?4nc1jnR}4?Yyvx96B&_T7>0hdcBcz&+^d6{FX$NclKUKBh zTBhK|Le{boVyonf)Capqh>xT47Yhk@Unho#Sbd&pAFXz~35%`_9(??NQO_7LQY7As z3R6Cc#ixrYvVD}TXMgmX^Fp(qc)d{1%yt8l1wD#I_KT_h%V_cR#YCwZ`?rz|94mg> z`67II6QV4v2}6%HXu^xAX3W1{1aE98G;iS31M_A`zd<~H0k{lWju+Wdi|(5kgT{+* zdvBS;%7issG*()6h5pWC>kmIjw1b-83xJArR?KU1~)ZQYV5>;~2NW{1j)=wGxZxgSi zQSKrg-RNE}R(LT)r>_&)A~j>3h#^^It1cR%+u?gQzQ=~hx|w2P)%i`2)F>IeDX12W-`>V+Nh-bG;r;j;HQfHi*B|hh+ zObT9U(puIqP!i;HV2+rPYggPULPCPYr7_o-XtbOwRxvJH=ZP8pP273t=Y?7pCKfo= zp2v{m7dd!awTZ^1w~OZlv=r{>@Z~)2D zd&JFu(3vhg~gV&0n@;>T%Md*5Q!0^F74&JuV zWTpVe2OGgpfM4$87D~UL%Rlgbaasd~4lc8tefopE@hcw`dpa8M-ok6}I5jk;LGUjJ zZ)qTyMNsgNyPr>n(gyDnjq-=YwF2$43CpV_HQ`ZLj~wx+ z)vG;R7EdRqE~i%;s~&Bn$8z18I0bCsd5`6IUnBUbFm-Li9=mHT_E^>KkteFwW8>Jb z-$HtW_wSA1dhyXX45jVX307#t?KM{@&B0Kb>k6gfQ)moojqXn~D;VRR7H4=X?#HPh zkFEI_OWS!Rd(=u_C*eX*ip64VEyBn4V9!Prn!-9@H5(g>8o~E=;a%lj!yt^3FtS z;5vEuYN6qDZ=%D_)5gWFgtE&pao;2+O)%L(JE7kg_^ddVupayZ_q=^Ch_hH5Y~%0a zwuzIc*-qoKVRWmDVQl*8vSIW&2Ol$;#zPcqgXk6qZ}XoBdD|PBc=~piiEFounXRaa zMXQ}%^F3_>x}%VHR499S~bOF}Q;<#c_S1d&L z;CxD;`@1feTJSENB0=@L)I;oPlo5SbeDH!P6W8XDBb;q59)LOi<3{jPVb%K$0x+C- zUwk^YA#1GqKwM3x+2NPZpUP?5L~mi-8k;|H{FFxU-!tdq_(>Py^&eo(A@L_?%~5Zx z`c(W$aBMo%SaBE^A?Tes>l7C6bJr<&{G!_7IuGCTy-F-x8{!f1Av$&b9~UKTMZpF9 zyb*KV;!@xX2Oo1jvlPzOx!N%JrR6`kdSOGthfW!7BrN!n`p-zH{?Z)M1hIU_ZrzpjD zw&3wv?1C>aa=r|sF+yUkkdIxs9a`PAcH`2q6*8PwfbCzota9cnd+o+8{gfku%hQXF ziQhD6`n==fUu@{k`;G+`D8*-gTPfZ)Wz0D>hhxlcW+|InbNm1YkL|D>`DBiMu0BayXSAQh$~WBX!@X+WM`)kOaP^UVtIx!im*RiKqYW%w|ATlRTNEt# zkz2a@N4J)@K$O16v_!A3`_W~Yc0X~i@26N=nGK{a`-x6_skJS9aF2txwVuR!8q+$s zw-Nj>7v5DqCKFoz*iQ{D-|lCZ}om$>1?|GWZ zX!Q$7|AlXvXQQQaoPJ;o`b9iK+~KU?ck#VA@BLMO#g2+pj9#i8y>k8%Z;o?~t;Py3 zF+`lLW?LPPj-C0g*=jDn=eftyJrb0%&~sNKM&wVlN*|Hvn<9*Iyz)Jyf)mIbR}~>OgAEn6$nxZJ-1ybfwj8f_;Lqt zH_-$*Ba_vRD~^IS3bCilRX)O|a^5DqilA#}40R~-Q5{A@nUAoYre!|ThAky{x1o)f z=L%{#PQ7j6GC@C@|utfcR!e_(dLb) z%7=1}Z`KHYDxAH9>k-@iC}~Q@*hvt^mS&{A*E`oZlt2dCP{?UP4DTYSYeCxk9-w~b zm(2&@Qa|bCeHcppB)QdtJOklZ_QWK~huFJPTnQmR>3b0>X}L{R?gMUM{(xw`ic<~ymY^q&}7q1a)s+=TpV=OCVPb}-h$_lZwM69fkFJpKsE9A#m zmWP!UVrPk5Br9Yc+wsGVcFYQ)lkdft6|xQ|+L#rBK+FokmmTzs8M8uY_mT9~ke*EX zHs4gZlD?WBvj$Yi(@>sF`gbzNV2{J1i@p5VtRN=eGlf-@zUE`9reBdZb9H}x5RN62 zYcGF}&;7CbTq;HZo~*@0yKXgx9!pH~Stx5slE*y4@<(WzN?2OQ^GEj3BJ4oiPr9z6 zhjUCaVs4=l(Ht8;3B{z@a)C4~f20_owk7H1`xp00Z7W>biWK^u=dbz;FoM2r2EK5Dd4b5Febx za=uqBHm^cn3Yz;h{z{@2{j0Dbg$!u^szKT4WRGRlDAZEwJ(MaUeZ-!AMSC66Q%UhP zWPfJf^VpV)aeo5M5r-)`IX79EE!rC_^M$iBW0^07xSYiNf;Z_bD#$VC) z!7k)0ko{GyNlK459S#~M|HP7ZFn5M?tzk_r#d>uOe^+YWfDx_H=x;IRviTOQYEABq ztp^|{jo6C=IFv@5T$TB4NT=ok`4sB=H%Wv&1>~OsIRXU(Ng@pINMF9fv%GJ^ z;cw&rVeIKdj(ENA8ko`KRb|Y3i_=ytGdA@h(?p4U7P(gxAUcpFLH+xULDSjCN1H&QRFfNwHZxV<{XWGa&Zz2 z8cq7s)H(j13@b(x%$);cG^75a0d-4I#*iTnbt@P*hEZ3HVbo8Jaq|v9?HHUGV5TO< z@cSWkEVm<WUpeg2CAYIzM8{AD;caS)+lKK=suZbv@kmu81pfu zpc8$fB!w`2GD-1ur_PHffjyyeGP$gI7W3sW$zkB7`cT;47pU1F7RSm=aXEK1ALU^)Fa3`b=lq(7I*92g-{Jj7%CK690AMVF_R`m9_; zKYgxHX8M{5P&ShUt}!1fr0+6mkG)imNM4-&p>PQ_MbPuG!wgf%Nv*{!c$~qheMlqr zIxv%@Tz(af-h3vR;Vc92v?-C!gYmr2nn_}EO2RDCp%HtQ&T7QW!{DA-qj^ z*`#S)K>w4TDi&UsMFqPJCBWQhYAJ0EY?wzUs_TvY^T=dLz}7BUh*B1yG!3`TnPpMR zhFj+yVa`I5d49e6Fxa#ZN7h{K3}zm82J;H2Ur0J%Kt0sxvWV0)rLSaMSMi98I3-si;rUr8uWJq@yi5XuIS2Ca znX8pwu-C^elZdla*Iu7l4&^Ts%o?7DpFG4YIoPh3Xp^i^aVz2lOD?{F%<9z+LKN$R z-(M#2-C_j64h{o-s>NVhgcMi|f>+ph2^pmBCMj75{W>NYQ{78h%kd33CbM}vXQAC; zjN46;yi~dK6WU_RHArYf<<`7HCV0QDdKFh>r|C?>f5~EEbVYxBfYdXt_v?2W1+S8x zLO@%1!REci74D7_z%7K-J!E;DFzIe%>ppUdsFPOEArrqvs)9{#k&%M7s_Jc$>`jE0 zZSo!05Nhs{!%|O;DhLm4=Sk=^71eP;h{3%rN)R34SL1FpbZEUO#UJ zwHMADAZY<}A6-k}{zx314Q1vHw?dU^Lcu#EDc7t)yok#ef*v69FlN4iYZCT1W^(MO zFq{eRhVpkvA2sXELaL^WS;4#BA>CB-O;$$M--0vmU{tB$3@ zf7%=pX$uAaCdrq#!7!f6?47YLl?h2mI@&%J2a!~?ABV{#-6;PzdDfZNw)>n*HT84i zB%v1_;o_`1;u7b;5hjj-;(YFuudlPqcY?`Zl1FWwl%t%<#G@`ItB%?_Wf^}SB}06J zTl%d}fpCw7&OrE~GE+_u&}4iL5AuT^G%?OhQaH?0z`9n<5S1sHA#yB3U zL!^7tm~p5fYEP0lU+eR#w=%b^>Y@HLNxsgiEeP(~9Lb`5eng89y$$*yZ-@V1_2Yge zm)mwUmiHy8x#K|s#hR+Q2rO~W>>&Hf05+^$v0BZ zk@1M=xN?D%E08WLH_=Dul?SCE0_g_nUI{-~=m3MfQd)p?kI?jW7IHjaQe_M(bQs6Z zkXK3y5F8F|{1F$vD{Mu)Knh^LSL!B^9y@9~A-K9H(;xRC>ht%FX7b<&5nXTsG zu~RZ6u;GFauiQt=;Xn^5H=s}9NwQ4K(Ns%5jNr#W2|cmxFyQ6%lrHnmfYP2)pqn<9 zeOJKPMN4g?Ncs%+`3oJH7|z2-cwW^EsK&BM#bYfTAI%v~yB%tKqWy1&lSrcKH(55B z013TNrQ0E=mz3`|Raq|yzYcj8HuRD*dXgQEavnZhQm#b1-ePkD8;?Cqxp*cmUyYztTu8k}h{lUJ{h}2bMI9miCjJB-T(r33Dvb7Vc2x@ zA)%BiI0krCryJNYSSls;d~)+(&19( z73WW^htlH`%nBz^N7;qC+eL^u7pk#{_YPy&q@mQ{^<$(5WkH`}gl>|?$5G4IO+?RFV4RsKUFB`Pz^`9|^5V>s>Eemd%54`e zn=B<&XgC^Ji#)FHLrg#xTd>I(EX3!)95$B2f)6-~ICf-qtEGwt$Gh-$XLjMoF?=)L z5aTVEECX>0ci}-(qzr-Vfaz1D+zOIy8=m{eQiu6@?#wEWvc7E4Mhk0ctiiZ)3+-}} zex;vIS2;g^M#E$==i*=!&j$V6b@4d1HT6T{RH=n`p^-CHy1{9XWz(1pO6OHZ%NaP_nxj;&3b+v=`T*lBb zbEYqp0>zfexTo-g-`Lg+gM~8OW!RPkgL~S#;As#-UTNHmSbe;I^ZH_z+O-e^wBw<; zHgC*QkiG~5u9gNxizNJB&M|EDB5H#bP`d~{MIQ_&=sT%|yhTa|^sJC33V0AvUBQvN zDx_=rkjLoGL*$ZlPa)eP(blpv06p6iX+pl|F#Kd0Q;e*?A4hu8`g@HrC?wU0g7yd` z=$vVeE=`lPNAZe--{7RE^f2DnrB~wZ<+S-UtXhtfA{=v$EoU9pP$JSIubZH91@F-@ zf-@_mjSUDkRdIroRh&ZtNUQPd(Pv@HDh{Y!C4C}P?1rr@u=KVYoai!CvZ#7JgH2+a zLRC~FYtqj1;2B)M4=3(C4<6rf5%V%jIbl3K+=+PkR}A_Lo3F88RZaPOe6tfe;l%)i zR-m`wl?F$+1d%w*THA9v1xByIiDLK-BeX_(LQJa3X|S%r`46sZE{E>xq-zBIP4;=Q z@ya^sd9S*o&Y =5d(6UTSUki8bq`<%0IMQLsUphu>8nv8YbK){Rmp)%=zTD4X9I zCpSv(`YN>35Mt)x8KO)o?H3LUsxIl9a~M_A))F(XXxXUjz_gz&ev$*zFR}O$7tF_C z(BpY&xDY;IEPGyRYj=HP`wLPyP6)qi6z!B=OKRKP(3q-8`0Wd3Y0)~ZYzhjO%w$M? z2j@U7q5C^h&)c-$ES>+$l1jLUiLR<8C}SG0TIANyg<~YK7l()5+~UhOICx!6p!8iSEf-D2>J0J)7RNQ^ zFc07FU@+}hSoN-yeVh4*Mc>}xZ~ku4J7JILn8d=GD#u0l7l(y-JYsy!KP`UQF1oW8 zzbvRb*`%FO`kwTRkfd8y4E^R%qQw$EkeqX;tsh7~VX8_q*l zanD!MZP+iH^M0sjSA9cQVQsm~>RCq4H_|Dus{1)WOM>(h5++$ETkkC)$lhD=chcG@ zJAng2E=l76Go9z&FjWRPlEoP4ml^xNlOC|U8jL$Bb@o{uj3gMVPDAefz_ZLm>?peS6kWtc zqg>*G?6D%!C zkQ-hO^QC>&1BZtPFsZn9S2JK#X%Ky)r3d@r z=|uSkJTa4#WOlGddCA4yp&&`_hTtg;z&)UngWqTX?g{lta({ZT#!L5tqGXvK!`+xH z(?h$Z$!^|7ur-HFos{l{-xBf#pd1CC4fBaP|$qRBJKpIuORC$+_xj z%~H1*D$}UsSHku*xf3=l-i(pR4uz$fVXlTNX>dIT7j&p29Cix^)2_6y$7mp2x1mth zMxNyT9ctRh-G$Z5s?z1JV`IBFuDQv$|&QBuO z}xwQ_K0u9Q19HOJ#YbTYebimoiW50ZN})o(_6zYPlwlKV8(CgXupQyX@G z!pJl%>$71k2P4e<2j0I%Y}mxXGHwsgG&T*EuXdIqXRneo)E49cd$*iLGx8u5jKted zq=#seXQuxsSW%=B^AhN1fpOOR!?eF+G@%g_ch7Mujpgx3bUB1Z%0rS!1P=lw3X2f3 zf;}aoL)}QZxP|#Bf1kUCl~K$!(0!ELQ#BuB@3OWQ7L1a+soLZG-FzH&kCOYeFsm*6 zI;-5{5I!*tUd_ksiMyDevUer?8SE;P`(VWUt&B%ZIu6OjhavqYxw9{s z8Bf+eH^$v0&uij*UG<%Dc)C0|(e77ycgZ7#fcc6)&ZF=e%~Y1S!fGc`SaUbVW!%rc zTke^pZ)R)>lHlo(_4l*JrMi5srB^U6T`QkT9xMG0)iRA7e7ha_VA=s5CE?Z(gL`<2 z0vk4q<2Wq3f=)4L{kWSwHG+q093EubNUS1>{1?XUlmh{Zw|P~vsR^qC@s)@d$W+*Z z&k8b?ZH3yj(fgb_%#;Xj<5_jw>%j5zR2v>$>VkK1;K8s1HCcgcZ~_9r3yW35WYb26plN|IY#4K>SM z-j7Ci>2kZf3`BQf@1tAo=EA>l=|h29yzuaa?7q_AOK zQ9hAp4uLciUzB@!@f)ufW!(Nc1Sgj@$ud5FQO@>y33Pw3NfuoGvfMVHJ;;uenSxRN zLDeMYwGYC?m*w0RTD)cGW|pB7p!#L`IeO(t>24~_RWNj@+2Ehzrlf%94Il-KIC$H&y|<0c4)L#aJMOEBuSI4j=<~Vd{bdJmJgT- zZ0nMDTo-?>HPjdn?F9 zKYDwFYQ?-Y%64fj&zj)CgM7noTsXFia-3EG`d z@S%+N{``}VJ>Re=riI_ZW}8aQ$58g6T!Dj37AhiZ%i+X_^5^!Da^RqRQ=FWGC`Abw zT@K0D;NtxWjml^kXpksGQwai|~p}OwYk<5;;G9 zths|8Qt9ycQ8`&KFNa-6>D0U<96pMje$tb)7)IC4toTy04O)IB;})yMPG1M5U&*+n ze$mq76)30glXmcTZ5LEBe60F+jICeEv#_Knu;y&%)M&m5rGKLHnQz0?KjmvE zlih#H*_6pK`X12YTm^q|)HL_6ELDc)ql++}(f_!3z8;~|4F(Ug6FRP)xo^h-CC%G2 z)`oZ?By|Z+$2x^&g>z1oQSN%^3pkDOKs!On7BnxE2nt#U-APbzKfNa`WAEo+D?ZaS zydD*Ae#4tcEq&i|WYgksVWlJmG_MQ)hNBkpOpj9no%CaVg0YUZP?V3(++F{q-+UEj z<)FKejx;}tWi}H1d6*uDGLaXdGEPZqK~kwMxW$;sbXuyngI#e-ey-Mw)yw#XcH8xm z3+S^UK}6lmHy{t6w%?n3p;T1R?_+*#LOH(oG~cjKo`bZFLrZPmlAh&9TQHk)k2Bmj zh|+qrUT|1cMhfQpP!O+RFj@{JL>bwXe2$y!LLs$3LD*J;w$ndnYas^Hzo1_*a6G01 z*CGC9{V2^UDoms{(p8pO#LFMS^^(YG$uX8?#Ngyhx?ykCQHQ*(vZOwf&U1M^|7J;- zoX=rnw4{8D-@AWc3p*%Y86xPPz>0X~X2JXv&crKs3FIIwxJ1Eh^pD`cB}ykj`?#tp z*R5q!WtxD#dv{YMqxiyD6CtJaN?!%iS&wHul*u8PZ?TyG_xXThM@-{C*;E-HAjkPa z0yDR0dKtaUjmx|oCN`rYehyokDa8Tp8%h@uDc!>j=@JqYJRABPN)wbP=yO$b1@Gc+ zP96Rmh&Hzxr#WYaNX$?~XR~7}#<7jlwJQtbMOY>qvl($fD1M_R+L<{9RZ<_fY z>nZelIp#H^RAE5qHCB^%L5ud2wWiK(0vwCd-izIxYrp&|G3%9nS!u5pxt&~39 z2+ob@bPRhT;~g!dybVsvdjW^@83Tn&=!HcACD7->-oWR}Grd-eIC5UtbK1d*fRd|f zMNDa#^oIQbYSADlDQHA|=A|g(Tac#_-&Z(uQAsks3LrYiX@%<&h% z?@m=N^S%OGQWg9#ZZjN8Rni1)3!F(+`m5wIDjME5`xp#tjh!;~&BybtmFra8i)Bb@ z6C|W5(*n{6x|@jkin#xYPrO`~%S5h&6=_&E8Hp=ryl~?t(V()0rBQG&P02_icnQ+; zl0`d)%O?$m_%=!(mAqut@iL5Pqx4KV{VLrgOJ+I`c!3_bNA!SAZE zuaKFGtmAw>W>1{WJ;C0uRf^Zs4NKIcNkct$thWnbyP<#f<8&dRA)UVAd^+fop>*n~ zv7H@f=Okze^5l~?J@q3h2sMm?AA@BmpU|ygTAdv35A!n>+!{6>%~W2H?77B>T;&ma zK4SdRUUBvsjnpfY)6V8w%L1i?(CRj}B4KgVV^0rpmNWy(Iw{GmX1dUP!OQ{yDTm5V zN=oxtxXH&e$thSSb6|HT>}MAqLK*d)6rWx9&aO(9oreK=-4**DUSm~v-4#Z<0KEOe9~!Enh?Vk}B0IJ_udvBsn>@1QS}z}5 zWE1yC(M-d>j)F*NB{~{FiRoXP4$6PmT&ZkfRQuCiMy)Vu= zkc_^E3FgrCRr-4GgxbE!VEI?vtS+uv2I)cN1}Z!K;SjhxsEl!AlHm8CvPRJEgH`>M zZbJAWsO^VAm^=Up{golP5@e?D5zy(qym#mkyqz0A;lkmN-tL`)+gVsO9tH*B?*2-? zAgzJz{grGQv}tdWPP3<9(Vu~n{gs|Hg60h15p>W1TF-8{$9ms1Kq(gV{!l-FPF-H% z&L0c<==?R*`D<=7(g!L&$FU1EjJpE)67IQD*{PC)v=|2DgD_~2vQsestQxG`A?OM$ z7_8i8#pfgthA3sK{sE_zK7{E*lx$U-&)>uE!t-`_(8+f3SJsOYK+h@Wv1=yaAvsjK{vCAxwD75bCgYZ89T}B z#dA2()ftYb2~n%#cSc`SU5g{O*&AA3i)v^+;GS!hj80}x_SHRS^&IONvAJ&s?ss2D z=XIKa^B0LrtaX6HSWYmzRgF-_3dQ?j+z2|Vy=B}pLJ26{%#UbwxRyJ{s$ELHrt^L_ zzp9hyTvcavaP8~3X!tSXp>f#oH3tmk2IUEFh5i$s3wT+Dvi>vusLlHOv>&H05hCIA z0e61tDZ{ABrW(9byio;lVVvSHoR#`OE0gsz_`4`)Ej~ZuPkH=d{rwB3!TfIh{p*bS zHoq5U@&dnMf&X#@`34J|vHm_z^JZ42$M?7_OmM;#YfJJS&H@F$58XPaZ5*ah3yhxV z@57cGl@|p42cxV^Y2gi+7bjeH6V71G|G?p!l(jKB+E3`WLvDsEZpMC~eGj$x4Cp6W z#f{Omo1o;|5kTJ!<0fF6N$r zC&QpA%6LKh9X3tD4y>Jn6H}Bb+QmXsmE3@K_JVmet(aPJ-_%%-YzvRwqKvV+Wm{-9 zO*s}Dw?MpAS)1=lKV_ch;TuSVa=LI#f!bRYmRrr*p0tNE_)fFRTTWLNbvvI|^op3% zIjM-u8F|9TX`X9m9GI@G^|IcI9?67=CfM%JdMhqn>4cmM*vy6N4b`{NrCJK?zD>cU zdJjmLfy-UmUFluKw6fr@l)f{m?Z?_BthIsC8Mq|V(*1NvO!=~25ELE0uAIyBdkE3m zaz3OTTdH%Jezwax_$*`p4COO#+WA)Td~Op<2nFn$xip`-l*APN|VD zBGvrNXcXxe`ovTF({N@s&U?w$hN9x6kcs-_vs~0)*%L*5j=d}4f5Fr_O3z&DXRX#t zxYmff$#4IT$sX%xuWZYl#2Z&}flH26%~di21UE1GVNCRTxmScTX?g}ux{gB8T%69= z7!C5%sI|i3U9b#sXq`9ax~+2x>gVE;#IETZD4NIG;Kq4MX9xT#tl{9-<|!Q<@F#GF zgHvu-E^DYx;oqop9H!r{(9^Zex4UKe77pI-mgRd$pU-3&Fdr9FCfqvTP5m9Ln6J>x zh_@Sn>y2OL24049+gZp%PEvFkN&tO)DK&fq}}DF^yDVw*bc87gQ*^9TAm~ zvM2Up)P|If_Us3gyKtUorM4QQ?@}HVT98auTiDE^Puv^LH_qIx48vr07!+3KRp>z+ z_EaV@(XPh7t&K6WKmILs?pllMq;=NtXI_JwIkAnif8s`vHIXpy#0{U=q+$w=aMs`Y zEo@VW1$=THj%=zmc#OioCI3A94K}0qQl;po3fkeN;w4bVBJT_ud)T+$VNGYjkHLet zv6zHC5O*BzW@j3lo}XUvuF}?l2l)wDj2=(NEdIB+_}oLMAuS_x&A^y>rZS|(3=+Oo zTFDj%DEJmyTaL6S=^Vg1p7%pfA)xs*v_I7w#Z7`I4rv%b8{G|@M_`y9L zUT>+RB;K-j_jk(GOi5yf;LvwU>s}~zglKo+0M*1Q(ZeZ0Cb82)o13TD!D&OF;CmeG z$YdzNXHRWVL)vK2p(Rrq;yisF973sw@&erhO+{hy9g^AaFya2Cr3^dOr=FnlQ6#uL&BvmTYCT-;#J!>>B> zz43+A)bvSx3*Y!er*ixK)kndhxA z?`KY>WAM$#-?pMk>*PW9<5ykjk5poo9fz&OrMATX#_xl3Vt z!weQ>&T9#UahNWgS?BwW(%Nu(fX(SoJ3`U898aSQu>|G^W~`C55_Y0AqLltDDvz_g ze7#d1BO=zv_RJa1^MixKh*(|fV-ayTK50a3Kx_R@1a~O>oUs9)6D~f3Az?W3!HAfL zPa4xv7pKnX(FU{=hx?qEzH7Lz^{r@1E2b-!1>UwxoF6N>hWz}DNro0;T?DffxQ6_E zkK)J$;cqqsuki(1TmYX5(-9u9;%)+SwNGssF!Vt+;xjOA(`Ju_NLHV96C#(TFC0cX z8vbGyV7#L5JG^Ke{HGRy;X+Ja+8fx3N5Qq|(s;#Q%&Qnpu*Ov$!-~}sTuyE)=5gV^ zoTrs3#9fs0!ZKEUdnhknpEaIvKHR3XOp2t1*#N{5rmOP4P=^8rw0oJ$GkoY}#*iE4 zUPu_>!*rmj=NaHthX=;A2F9^&JLL`53CgfMjkWF8sracpoBv^~?ToQjwHkPxn-^4% zpe{TWf6)e?dSBzv2;W#tq>qiTc>XiWHx18jERFlX)={W{wO6LIQ`d*tNgxxzoCkHI ze0VUn$Ph>S(yY5#gu)mh{o*M`SadxjgtF^>{VTMGai+-^%VAc; z1N2bD4{gW!CS~9bee4zoio`5?nwOcGgC{ureG_aN=SvG{PgCZ&DeBzfz=e7S>c*k@ zwathZv2uQk1IKM)=c|+t(Vn#`uf|`h@%8USp67chv1G^C!Wrr4Qc#*##TU-S8~JK9 z31GzyzMd`g?e;Yev!@?X@8uuhGWn&4`V{P%54b(GJ&u~eeYBWm=QJq6a^3WnPB{;YmVW#Q(z0DE%XY8Pa(*2T>9~_6<0q{+ zf`nUge2`^g`1Rx%J_%|OUlC5W#C?&MPm1wPviKSlZq=1$@!ILYieI0{v3_=uJ7gN&E98PlH_~#29G=Mb5DE6cdfIC}OcsVC=I0QcOG6P& z@!%N;SO!DS5!{KwT_{E$aq$X3XfAEM0IQ4f3-Xb|t_vq>R6kyqTMoSM4a*98BAmo$ zvEIg^3$12#@Q%}lmkmDRuGeq#jDic^21@49DMcH)l;q_?D;nTK^L$By-o{up&zBtU zeFwJQrN5vJt$w|>)@@0>LtG9R<&$7!>M@Q4^tGWYM1y@yzjxu zCBBM|wJax>QStkbt)@meipAhT$LtbzwKaG9Qd%)FINGztCBnNv(%V+) zzNDmZTZ^gNzNa8hr?$WtfI*3iyq*^2!eFIkShkOTDlTiWuq0~_{z?&5KKi)Lp5Va- zRWGb(u+=HYJMEADQuVnnxjFR~0rOKt>P6IBjKjK5@X-)b_aIJ8^k!^kMVl55v<6A>GF+6o~_Jnc!%RPw#Fnj^wyAT1hS?9 z4DQ+QNTU4&3G01n`8bksK5Y1**28NP_z242!MzR2j9ZT#I*K23KbftXeoWK(Lt z-Yph@Tf)}$G(aa?cs4Ef>+TVT;bY}@(JK6Up;JC#gD+{UU7n9HID%OLKFJc9jV|^G z#bgP+KzZ@T()O{&VsOv%E;aT+XoD}MVvmE4KIC42e+mBn?)0yGblcgr0Qtz(JxM@$|Qe zm*F#8Pj{R>R88qvhoD(V1heTWPg&aw2cGn$W#C{yXJx#{u5knmx3Qe_QM{f|E;0sf z^c5@A5i6hbCDDG#XX~-4{}I^robNImG3uW4-HL&}BOus_qR@&Qtq0SJI zHnJyvPb1+^abA$k$nbjU~S|al(6StFxBwk&!Ec|p<-+` zeD4X~TnN47Ywztqe^#tD-3N{kyz{D-!n(R(S~ny8W#1IR`yrfs71w0?zhTQOzO)wj zV}f`Lh-m^}u?tU@;_U{9U-99uzB+UXuQf^s!Pk6CV!!u{UcihIYT_8o>|@lu=KBVZ zC-E*Ax{8Pq1;2NQv@4BcdvLLmMt4>k5FKz44Kfby^$iu$=ti=e$nA96U?W)Ldsh|6 zH<0i?HQhImhtFbioK2zVnxm2hCccQFO^TsF`2a1X4KXNbSTCVZJgd15c75P`(az7A|Do?Odb~q3 zcZ}47KDNla(qe z5q|q7FPH0-Ge_}q+6*=wVda8NZM>x6H&1jPhwTE1M|{nT5x}-|Y$4KYVq!DJWi)-G6GHL`q zzwfLc53=k$DF(NGeQOd^K14mzqG$8{LJJOufAO(YE%r;a!PCCp-Zm5!CU->$&M|lu zeCX#z78`4R^__McVAUDlB>N4--+g;zN_YubVjTG0r#rcJqyO^R-w=ax&bPxpM%;JK z*ID$gG0w!P_#3B>L6E4)-c>M~sBL;Y!mLe2DP>L0XOc`5Z8dKRJbz#~>$hb&?ok{m z)D-XIZ~z}Y*4bNaoXaZKCXCX2u_4aG=l&e`5~NGWWg`^fqsOxiDWeZNT(s(jI8UX6 zGhcv8%Ef>!l*_*wQu41Kd3%^!?TIVbh|iI@EZeJOWU>QN@zG=3c}$kLs@v5N=ef&; zdmcY+K`uLC89v&sWo;Z}-E$$M%EG22SymDtrU31i)y#?~tlMzb)8uz3U|x5X&6H>s zo;>Zs4|eb-y^W`(bsJAh+^lNJv?c5|o|d>b$lh^|54bmo_g^sn6KQ$+iCcugG(~OQ zbpsUwhk&P;FiXiMya*OE@v#6G=nbbr@{A?$7TB$*ZJM7~)O^l3si?<=;jdFeS@rd_ zi%TZf8-qu?yWo2qc(BlhyY4N4cJb=N)cr9%Q8#wStN05b?2X(5sZG^42JiI~x_0$p z2g88EG_~RblHoQt9<*42J~lsRaI{oxeoomD9Y6hOrnZd*Y8cT>T^xHc4mVSe;%EQw zL)5S0MOPoNwF0k-?Nu=2OIoc153(6#;bas+D*l9brqD}NL4Hr1cF;(_R1L_Tw1doH zn8A7GD>t1y>D)vimnQt1%ybq5DqQe5 z*7q1Z%0m@1ktrJ6FH=9pv^j}oWpIM=u7V0J7{M_d7|wHp3)cjqms7L)oU)#=F1!l$ zh)**KTjtUsl=B}Mqrq)^*=U!mO5PS`ynzy7fJ&fGoLMzDirTAb@d7yk;|kRmZkGN7 z2~@4e<{<3 zm*x2^9DkBI53lPVE}luQx^8vB{Vw`xE_kv7k4|;L6B!(QJ=FR3(0)%3^)GKy7(ZEK zE!x*1H`8HFFEy=&*_PW)Z^!MX=fHtpYIX%_X_*K&$Lj^lbXVBriI#_>3VIRlW#D;D zAytw3GsaIGQShh)C&^E;rQ2N$C!2YgR_w(e7(hBaVl1OR9o_Em!w-unkFc4>=58>v zNNshYa9OaXNDZhqF|PND)a(oCE;G&)sq?VsUIFEOsf*=DXcXg(c8=C+)z$&35igMM zVOQTqtYH=yC;F-zG2i@qsO+ykN1wp~DyDGZ0owpI>E@cwmT9B5DiT32iB%Tm2X;JW zo#eEkR~%ZiBMTW^FuobWOlfxE0&0cEp#iFZ7cO>ZahefE`8u65{oeRxp!yd3rZifN zy+y;ca(a@Ey@eC=NemxddcZHm>gxf$H#V9QQL*vb4fo+XTVaia4G6VYs`m}SR4%;T z+=5}&LhNsSC_P+@(IQ;re`}?5$;1EFhtpNIMKc^W3{o?in%A;3FQ%Dxjd5_0T0;cV z7uF0_#|vf<&JIm4m_;)A7-{+N!``_%b?G&`KNJUxcVvv zv2o1CoRBvh6ywcA+d;dp0GO7xkulUml|8;z76%h7gYos|kr$Sj(k3h?Dfb$Gy>hdo^JQzyyj z=R+dPNwi5&GD>}-Sf{_lClpfQ;>~63Nz4ZvXF=weU&!I)As4@aqUzl9G;k75 zP-E$vhbO83aF&&&Q`N8Sg`80|P0d#X9WURVrQRp#>x?tA)H}T6bt8g1zECI9mFHF# z$9O%v*dYdkTR-PG59`P4<2Y@I?+|j@CmkOAOoBTP&dqA)V64=iaN&8Rq2(m~@v6Bv zzUj}hP|B;~`+2;or>&~k#K%&9;}V*2!)QJ0ZE=Z2O|!|Vh959lWu9`%@Pi8r{wSmO zbKTe4%)O34!oKOJ4dDxKQ zY8X9F%^qU6;|kWXxFR|$Z#jS^+)5YT)$#1|kHG$UYMSF00QFdp^S;VRxLtiguF!Wx z=;EiAHEs>7wW7FT9mjbKW7slvv3+p&bV!M!yR6 zCcH;{3v39f__4?iI2l6I>INIpSnZzUF7xez^u=mmJl#FR5sypvl?%U_1yruhQ3mHy zJj-eMW&Lp)@f0$6@yiW@BEs;i*xj&dF<)P?O_KDx)LT{Wm&USX>Sn?FwbA_{^+PW{ z;~!S{O8Be=^)qiLZ7)k=*vcAw9Ict#iyVp2c_f2dH>fZtLFYgGh?iRciAT5;o$>xa)8N^6=5>1Zyj%gJ*z?>KiC~R84M$ z2W8ll936D(MgEmoy6X`~T17UgSq*5J}9UQ?)> zLyk*9M}n>tPEXG*t9<2HG1%FW4kz+<)zOYF_z4Hzf?xVdPiib?N1<{Js`QnmEt}o4 zR0OJ0n0)D~t38(k4~e+kN1<+wnp{!mka%)92`>0J$(NRD*&L4NM;u;fRhLEK77VWs zW}ceqg8g8X&tTrn^bX~T(I#)#`29KX`nV)6s*ehhuVQau=8 z#poGUOuhQY)MU+4A;|WQX%a?56{3kuTnBd}wIIM}mqkOBFOYj98#+rICG*g=wWl@xJ$BEn* zew@UyHe)ysV{4h@J1BTuO&zjDbz{JgJCO+=jtQO)Ux>-%>_&Zw?Rx_9A;o|u_TUs)BknN0FqW=N$ zThtC%x@Zgf^B-I)l$dj1{lPK-a=@iH=TPA049m7)pvP!LhaZNw^2zBqC((N>wy1Y{ z|A3-rIhoDI!~By?ZYfzg;=9r4i$R1}pXRQH*`FGdSJB#q`vaoSsww@>S}5j{mcRYi zV%3t7bBVsCtT>$eC)W^zP3m(hCgI{ z0TmGpP^gIL0*i=>E7<6QMqv;Um3vWfMFj;#1qDx(|L3jh>gkNQ-~B(&FAqcYTkl(M zRlQa9)?2r;$y8)Uk5W<$w5QyWm#ApG0p;(qQ=C*K#g5SOcvo!;?QFDEE2Fhe4ehpO z<#R>!J2x&w0)BN8poaeEHf5E(;Ex_6ves?!UlTPvPyN$>Oyxy}Vp+=T-0e;zJ{1#~ z_I@9ZQ^Zt+sKm$E`Rz3JIm+}`{3-0iHGZvBaNzUDcIh1wT+7CCu0p{a6@GbRTrnNv zGXo-gk&E`Q9ez}lmMWMndqFRzmB70IQ*P+0C>v$G-?uCNA!@=ER4YY*o2xRj_l9ts zauea~rge1XtFVdH!_lCMn0^uxIE=^T{I&mg?Pg7T)&F`TT59$#f9(c83w7kk{mp2i z)L+@SUH+-1SN=3|qligw%8?sj(wltbCi2FOc02vQ@oLWf^Iqoc?FP*ox}X=+Fd{=x z5H!@4Nivj|Txr5>=)3*cl`IxZ9U`&!%@#CTOqKfbyes@KY|Cz#L%&3YS;@B|IL(}= zr_43zP@@e{r1c*zc5l%nCbxe%PT4>>JKt}y?1(>km%OX1C&<>r-*HC zqJmzw>&cT&e7r%5_Gqn+_|<3&+W3~=_2Sj>y?!jAU%|U^{^aT?C%JTBmlK=#j(>1F z^(`*rGTz)=wvuRWjQi*1I&u5dx7fLN{J2~Dkd5O;l%3ZjJP(2wH<;|AI9!ABCU|w= zykz6!ehN3BY}#X1(SHBy9?v%{?LGet&o|cc_xvs6VNX{c^0!wf|Iexh)zE{BuV|b# z!4)Ms2HqrRy0RpUX6~=daQVN*ijMmmw*HUJW~vLtCt`%ZeO6G^+PB!|<51dPv%Lrj ztA;bpn?xb`&K{BP&sKhb9{E!nJ6>R2c3C!|WniwY__iK9Fe?K3CK;M5s46Cr$n>o| zwIawF5mOmgPIg(H<7Fi>?bc7{*ntnw--rom!HSPT>|nya71_FxqOkqHi?S2P1s#8C zor1p5m85TlpZ!RNNalCKukr@5t4B!m6gRR&of^U!2>(ym;tydso+5QBs#aM+6?7%g zp0n%(oF-?ZmAveFqN=i`hZrWP=UM%aP-d``uplAoYHwG9zhZ?S`3DXR@59Xmag;gi z#(#%iHXXY}fQoT(VPzYQE-#Gg%==S0~l~N;~Ca~u5SuUGq2Rr|ffBOGxo?A}* zzvnsaWB;!y5zIK@FfH9xk=ZB#n=%t~NOU@$URm%T|83pEc>d3xh*Q;6XHrg$(3^es zq+7Tx>~AqyN4MkAQ3&FphSRK8pZKR>HntsGeahd)8}hULr!d*3>a6)`e-E!}to#B~ zW{;irr+HPA?I6EMHTdOwLp2FZXSaO;TsWC6{=$#jKQUk| zGMD+Bg!4CJzVzQVUhT>4vm&l7?xaGe0>a3vSJXdGEY}GC?ot0rw}ntM5`t}H=cOg9e-_Boj`~-+EdTKM8e}Y!0nEcF-16t5C`Vcytiv9(9US2xNxjF237QEF1XT@CX-Pj2c%^bBxYIa+6<(>ZfRO z!y{Q4!e@pCqc$|BY++u#Ifm1jJgaC~s1420(l}h9Mh3IWEB^F;KAZ>U{jYn3+KJaZ z;r|5d@tPKj zq6&2FIfq4jK*N0wD_Dns=CmlbE}&tR;!YNCXakMV?5XD;KJGk!P-JNBjL=G4RrHlb zDJ%~?$krNKO7fmnERTvr5kpFQQGgvVv`#5uhFgn1!+Qrlv51Q2Y^b&;V0|Oa)P|Zo ztC58^!w1*`Q#QEPXAhL1w zv@xlB9%I>D0|+aWvkom5tks9DQ}wh|Y`nzwJu;Qi=kr9Dar2WW$`_i+(i&*k^E!)l zft!gdRWLN+b(2hA+Ac|nSHqJ@gYkBcYN~*f7YKHUP=8b{JfCZ}f##%Xum$Su9iMS$$_z4$r zg|)k>hD(4WkF%2Ih$`~9wWzta4_ADyc0%z2C=+90k%`sTv`j7En;LndDp6jSC~I8g ze594uGHJWWRAf6#Y^~)a@w{RK$*ZhSYwfzWl~~G!4CRr+B87?;8>DuMHkbdJXmfkG zi~H7IXWLtAy*)ctw$bW!+{NFc-~l49(Mfe0jS5+Y-r%lJeUnF@80Kz8V(2wi&_=u7 zvxBV$hXK1Y@RA3Q!nfzO4E`1nounKslfh%i;O`nq&PR9sCFl4osD+3?hhDQI-oXm8 zw4QBuRLy9C9mCPc)iYYYi|x*$j50l2tJfOuaog!kL^_d6vK@Iu>iRwI2rCl9yR5=& z?I&;Dw{RO9)YcXpONyfbPXbSnFSM79Yp*%`D_L3xt!J%|GSb&68S(MBVN1~+?J$Q> zhXtyG2c~QE-IN1BdEQ|)J8I5~A=}&$T1sk)iygJm4luHl*46=*chdgm4V_^%bF>G% zp|fmlj)v9Kuh?a{DWR|VkRiz1h1kDB{p2tRlA6Z(imgx=s!uoUfXErBS z!vllAvE8{EE(E)Xw{W%8F(FJ#K_75NmHAXHEvmcaq03SKypYTPr>MWZdri>)%Kg(Q zL6w}|7ULyWaxI!!=nr=BS}0h&iBZ@EZ335;t?mK^nvY#6TyeFEHi^&`w!e$^JkiYU z3JsDUZ_@}83O?8a zy=|z5h)Ydo9eQZ5dhs6L`5xL5Z=?<@>#4oy6np1hT3GwNqf+r;5*{sjVzITim%EcJ z%8x;x&)05)UP@*o`w+Lf>|7tDI8uw?6!u78ZKfJYsknbP8`Vdv&C>g6%!#V9pBBax zY5w)vaPR8HZ0+^hbURrotWAGyq<2pTwz$8Ra&tn5j5ePtISWas3GFjleTp&68)*MH zzAXx)ozw1o`E7+Bpx0!UM(^*UYao4l#t1c4p2b^pVtMw;0a}k?dpeLxi9VgS1+1mI z@pW*qz9!1rbu}2bI*#QE*1l^6YhM>@)d217==9FS0_}U;_SjIALZm4hH&{FCh@xA+vN5(3DLD#(1?8`ltz zfJD%P;!+UQL=1L2OSM}=ohJQqoY$?0N1_zUu^g+zaLwbGE>@SDv`JBD^Ud0eQE1#q zZHXs6GRUsSgK?pa*VbbJs)M%w5LWY6Ei*kd)Xx3z3bgXm7@4hDOt1*S3zyPKeLpkw-?uI`+ak<}j?|@hp4125b6%rJum2 zfj%XITNyBr;ig5Im>?wnzQ{zjcD#n`EvAZ0gr@Vu5JCv^L?($YG=rT0oj)>3(1oY0 zoS-F-i4==5lC)a#Rz`yWCy)9Gi)M*~Qyn%XViN){n>km(PiAu_z%Y~|>^xD3aNI-< z&#%Z`DJ8dQPsAnAXv7yPW5Fp}?bfC2B=OAS%YAm%N_j8B{q3a{8KiKER$5xh#}*=( zpC`pe*PuQ_1QTl@Tymk(sDEBUH0l3y$zXVilP)5@OEZF{82j-e|DPF5a51>xBmhN9 z%SfWW+vig3qNatR`Ehmus3%UrO^Ftqc$R@P z@ zd?#CVhqlD;g0rV%%A}m)QW%2j8?4$noV6-P|^{RWccDPyabGCo3hEe|Kym}tsEu{s|II-|W z)~>u)!?n9>S)F^e=((J^_iDMGl*rS3DntYlgEkT9DLf9Xjq$4M=oaQC)=j0_H+aSe zYb5p!T0De(c@Gak`w3~&4sTT4AP_l-?2N`x`H3r8JE-y7wfl_YuZCZ+!(sPVf!F4D zi10IN(|`Ecf_=p%{FilNp0>x68F}5QQ6fJ(i5S9Fa<qTnA&$E%`Fg%65Q;Y2^*WU1l-p^SHW(j-VXNwkU{1Rsl=fB6cFVxz5V4N=0 z8hS11S?zn`i3bO`i~jTn zw)TGQ)pn7?RfiNXN+{vs$N@n=>>y7|qVEug6LGQh;s>-9veL2U4{Dn-BS%DTA|F?% z*S8G53tdqeUqSHt{? zF3z>gbhy%MhpU!oc%tibp5$`%Jdb6edVw8TqP6r~T=_81e%ixYemh+MTjeRgGCQAP zugK>Y+{K0Taq>heTlKJp%Ya_Yp+qEvJ(j*ydrZxZ)TC-PzX?iJ7Ucgh)rbarxuHjr*76@^=ybzZ5_755`nYR!=4dTarM;S{OQwsW^OJICDyR@y4f z>-FxzI~=tVYVpv%{H8GcM3Q~^OQjZq%=H6$UT2-4c}53{(5Hp z@}$;C?Gzcp`+Cl`a=lD0v}GaR96_@z94C&vP>O&X$_m!gY{y7evR=zfiQF9JVILF} zbc5Lz&~=IolYa+~{n;5OF-}!rioT1KM_Egw=S1b~9$Zhp@6|HJH!QbgkvB zt*a}{P}2Nd&2pT==Tk@uHOi6J1J7zrDXlc;E%2RPVF$C|W(`XKnB0~4$_|9L!;3ud zaAI?sEsGo3$jv;VtPJ73ksH`*?hd!MZ`Qs*apMBH=e66~g~wlA--O25k8r%kiz#sr zU=)Aio?_PJ1r66c{ewr8fQj_77qnqsOyHk5t6yVP+oD}`PO)N(hSslo_=3183bkTA z)#LE@Y~m~0y;5aa=U&lzU;u+-hC8+NR24?F$Afp1$ok_m>Yv{ixoB-b$c4TuY}!uk zF~1sT5vTHq%4)u*?W4|oul62>UUn2=gJtj2lB2L`73|Y)iH>Qu zzJr;z%t$q!w}f!8LY)_1;X})yBPVO=*25srS@)dqU~k#9vT zYCV>H3bEjTOu;EvEY_+oV8UdE(=c(G%KMh|r&6JRQ+Y5o^c5-|Rt^PRp{kA8X?XqTT5AQK)hG}5VO!2%`d3b8m7UdI z^M;zUysv0PMhW64i6{XWsbQ_dgB3dxguQ81MBc(G`%3GCdD2Xl$J;tzX3n7)R98$# z&S~F!L$|TL-_V>)2`l^-)A!EX&fj7jgg2hgf2(cqhi%bDTC%m@kuBKD+WsB4d@i$f z7to5;->khCFmYmp?x8eN%d5~sQ>?rnv~QeJwL1K$-Q+-Q`OjMPdFRAmv|=aMGk=NN zne4a=WA*w~^QrB^S+so0ON=gK=9z|YT471GjYll0;)V?9+lTFv%4Tz~PzCs%t-hko z_N#4KHWykl%Wj|8b^T4c(^_x_OOMvP9UgslYItt@@U#3G=?cGs-VFCEKHk!{-okUO z0(=E2eT5?;Yn5NW z563}Et@?&OJ}=o8Cwg8(CdX$vvG^!-t^-Ol!8~$`!gSW-PQ6qn~Z5t`Be`kFTLOh2rhPTGiB3y|cQo{x$U$63gb+)T4JYbg6}W zuIOT|tEG30lkMI*Sx5g{R9E16tcmsX9!9vcD27NEJV)^x%kJXq%+A--Z<3s?g8KR$ zQQ_=uppTX)mYu3cXL|Rh>ii-IzU957p?-sNkl)&!uIEFGc4K;Dy`5iu-;S{>>jOAh z{euO$x_F;=T%oq89HHmf(#HBPGA3(j6aB0sc~;h3pXHz~H`lvHQF$%(4^tx7@zF{e zZ(d@15f!yBlE*r<(kCa7?8D)CY-20kc@4)p(Tb{yY}<{qbUYZbitWhKKNa*?1zVS` z@01kQ#J2h#bO|q5*&X#i;{4%JcCNZxov+bdGg^7MI!+Dah}e;?`VBHPYt>DE&l~E+ zE_c&YytR60$5d^h5qgU7J@ARx?k}^kU&DFONhR8psxP*AJD3`&zv2hA=0! zHcp5y?=3Dq@>kV-fe-iL!z?b|ya?grLd%rDCqW5ty3in^!xH~sPQMU#lbVJz@@+9k zz@Ln766IN3Ab3V@sIWfhp$DBhVV&=(KY(ekLK}Y*TM*JQJ6mei%-8RAY5`l-7oxP~ zYnAoW4>}y!@c#N5Z{%j{=l=RHP8nD~4{|rl#2fVWPVlWa==oR>9LX*Z(bH*!McGM+ zj9|?R_1Dl}TW1RO22uX{uxL}Ux(w3?BkT{>(&0$AH*$+r|7LxOr(dLq?^h6l8OQf4 zsMV;`rC~g8uu#yi(@=-UriR|YFyEV_DrGfPTv|+f8hF^q1nc4m{adv(GKw7_Ddzn_ zQbgYsPnHa-q22XGZbffj4I464-rEOxZ!ZSXoYCnCLZYGDFk-??C*keqcm%%4#*cO3 z_c|q}sm0?2L1esDGDiO(D%t+U`Zv+5L-Ho;uDRpjH2teMr+W_FZpF{k-$T`#!j8<+ zUyUM4*s9s6v!Th>_St%CN7mN4JN4pdOvCTi{|UQjs-@4>??yA2ZY?U+e}vR$SY`9{ za(ql>iSwh)kad}_WBfdgEt>BtvhDMASXUV2b_t`ogui3M!+INU`FXa8+{jF}J*@vN zAD7J0R2`SOvfPn_8kr@;5Wb7I7J*;H%cL>N1k(plICd2ZPhoS*b&T8YU|Y&{^t`)R zmxVf3qvx`V3-zYn$i1xoBK|@Az7XKU8=g|e%-ayAOE1JCo8;pHlJ`<@F`#A@UfqJo4-u&RGY`u@qR(`BX=0^0F>)M<1pK_C&azbA{if zhiv#BD?;Ps2*$sPNBG6vEoj0>*EAX59IKQkF8oL|qWO2)fit3kd(IYtiy7b0$HS;A z(D~cUd(IU2&=MN5+7ZqWen;WwM0kfyhr|my9j`;;dVgM&OIc-w-nKReLJwAzwQn&? zT(0A(mpf^iiZ&FmGOjcx#YN(k3{v~s$n02w_oz_D@sT;KWH~CedYLU>u6Ik$Ut49v z3$I_kr`eh1)E6$b%2w#OepiiHg-nM9kEstT)P($fZ1bZ!J*D&hqdI@aMR>o1Lulk} zWj&@p?CBSJ*Fxm5qL1-)n=M@1iGvm_9m%Jb1zyZLRmI=T5?AXVP_yB8 zPMuk;&x*FFaclHRvPH2YYXluPNwz+z&x@BRtIIn5hG?ke>-D}8#ZIk{vakv_=)X90 zR^djyK~%TR*`zmex;Ja>bI7cJ+gBo&kssLp=k({XcXVfD z&35e9pC-?ucLlQST^DlXdq9TNm)|G5JCbUhrUHzlS&I&$H>-{wkS8tj6EE3?ky)(% zVf|66Bm5P_9f$P~y`kl7)e)GDzu=w3(4!de9YOyGS3jz6ipNFZzge#y)oXgZk1w_k z9MhwxvDuE}E^EB#1KoAw*8UHL)y`YbxR3M|PW^uQW4)FD_TU-D`u~AQaj9FM|6sV} z4Xt7YpXj*rZzDa`P$Mu;wK_t5K7?sns+bRk@3zW5(Q~~i>fJDr#8M_LUGg3lB30E0 zJMyW%$s5{km3>A7rqGjI)(Mydb>bJ7x%cvKdJ88{Ec>#)tjZpP{g?IeFiGapmV{cY?;rXs zZy2ZX|3Gga{u}FmMSo7V)8&DAp35ul3yi~#fo*33?>aA+vKKjAC0<{af=OazMFaTy*llKY>q!LS|-Fg=?}Qf*?2wh zj6|`mdLS$TD=!cjT+N#geV!U2Ra1 zHMwEn5+fvJXc9>FV@n_vUPAa+Hmyk@H8ot91xXI#I#Z5QBR`4)ruNt*aI-i3 zs+HI@FdJs#zpS!mffU>znaozV3=B&x-`U=G43C>)YIFhK+tpR1+^0C(l!C1SpLs+3 z*hO;jCeHEJfvBZbr%m8*UT^QWtX0{8$H21E>d-MT+R2o)x>F!JMfY;&z<=Vrd){Ox zuMI>8xC^=jTw}b&T?3!0QViD2o`L9y**e!N;BopLcCk<3Q-|t5d`|)SBgu1iEz;ohJ^=iO}tNXio>! zsQ`brn^WgTsVhfDlN9RCnKeN!WKzTdwv04C-b|qQoOTimJd@*n*ou z9zG|cRKH``?#{wDVo#pKq1vZQFLCrC>nQZQgCm0 zDBCiE##VErIl= z^vs`A81?@m%w=|&!r-PF3gZo*Vf}9j^uqxPYZbxNHg}8)jQ6Vht;R)x^tkG{eymm# z<)!d?g_IAvb}u_IIgo129vf(wBz2axDdQpQg)rQ7G^5 z%tOCnP~DxKyf2WPj5e@^SMD#PfkY=`*)JkxiEO(Yla>iI}GUcIZFFEVzH zU}P+~AdoWHsUq>bmWkr$$N#P(P+ycr+(4YM_D{7riOmJyXw@^=+A8tHMR|w|My?W% z8l_QqJHJXiI@81McoJDQ;Ano#D382VqOkvz)EnKT_qk|k5&ctTc^SS z149MeAkCZTDt7YK_~usQMSlR=bv zB`;aGcB{*luMj1BenlXe9a<5nPsIxW3m3^OxDp+YQ;aoO_R2s?RC(0oS>#Of#C*V? zi>wx#vr@E^bt~<5;z_h~bMIe>F38Ryo@l()Sdh74EYmPi-HMo~ZVOm|TYfZBVU1S> zzH#zj=g~maKx11U3+y2)ckbf>*YM@Y>cBp~`k5F%g-@}KPXwI#QPy~ktA}2-#?=iT zU*qcZSl-&eBmVGd!6bBsomd-q!%4-urveW-T@vg3_rOCAYX9E@KHUFwD0bk%2NiUo zS~&6N50ERAoY@f38CTZ zNuU?lT)5Snd`|)K2n}~J@9_hcZUaqo)r&ORn4gAaHjl?sdxi(LL(c)iPAUd&OAK!Q z^#WJx5({n!j^-SZ19&jg;5 z;$n+81-eSWIkd|GYWyL{!MDpAQr}go!T%x;rSVU`yZu%%vq*CteC1imM(< z;>jz=g@U9C7e??Jfra{pv1muY<&oLeDa%!U)|^)Y0f!q~{A!@B6VdKh14pB%wL1a> zus`M79f1S1bFp$~pqtOXtuBwITurqScL#d7JQ`Ys`vS@FUSCVAk<@kq1M{vCixuQst39S_`!HJPUD%twLDZfY~$S4`uv@@~0?8dPvlP{4#R^XKqBWGUsUgj?5 z!EWVnV*V(0>O`R1{~T^lkql=QejKoeXQU;j{YPjCK3E+0391+_G>yy0g{Jz+z#%>s zKKWSyHwuPBZ1`yy=HdL6Uj%S7Qg6OE!ZTdS#m-GGUud({;fuh{u-8Lu>6d{Gox=Ha z%R>eAwnbd;&fqeqGV$3=xPPA5k}ssP*(x~`m=cE-3NAJgP+SNi0``geiwi;cAW)5& z9TJSiHhBuChWn9Nu|aWAg}O9eBq%Rx8zJ@FBo?{qGQ+y*T%d2YnuY$*}69?bhNl_eCwX$CW-7wg>kyTzs4;>mJ zN>?4mP6GCV;OEOA$W?EQCQH1u$&;%_1E4zCLQ#HpqCgC6+LeH__j*NhgSK98D>R^P zZ7prh^%~zpSB%9wokntIcr3R5#q&iPh`mA$V;gPvcsuiD(ailNJ&bP9=TY$~a~*nL z_%^(fZX}n6Zxh>soYo|?ATQ$39d`C-^4-^*N9Em79_lP-n>BA3Wfcxi4c{)phNf|0 zi}?A;WG*QjjpbokIKikz+iX@R7%6@y&=gjgU|?u2nM`FT6O89*zjYkl;J-YP%gw4x zG+IOjci#U$2u@@|6ba9yEw~pq9=0se72gCF3>qn!4iB;QnddL>D~B#x5K~!U&?Upf zYC?t`su`iE49jX5x$*y3<;&)}K#bDeGA#WI84CIdPMWI7FfXcexIeu_iTsKR6Rogn zRIa=-a-PcgC{M_lEvsYHidLFwY)c&@d5m4tXbDaT=bmUF!qI6=C&Fl75*3^ftcdUy zCu|fy)oNbXz#O|e+ios*S%oRahAJNM^{Y~_>;}eTG$%>N&*gG19ZMJWVy<N z4Hb%-7*8i-hYU6VTY+kr*?cHURHv!YPjxnNMgGQ0S{hkNKjxf9GFZWn=6nIyH|#NTVT?Y`;Y8nRcA}Lr)$=Ip-`cp8AZQ;F zlXG{qF~)d^;Zx`W<#|Z#>HWVL>eIN}w8QEx0TRy`swlhX}o@E8?joL`&#P-JZb)Wsy7I&LD+uz=}*0Y8s zb}$;YeG+rUc51^9)A}TKk$NgttiTyt=^uHP>?fHcYj_7EBhK?2o10_Q^K53Ta*QiU z&+~+ot1q&(os9=QZ&3-CDE&uGe) z^yL0qdK$NT_OklDjQ6p|b*`6@1>*W4qXPW5gb;Hy1z=~V;ChfE@&;CuK9KGIm4e&) z$rKC`k@rRvh&PiBzTW6AB7cIl?QgUL+j0G63NqPi{f$ZRLNYR~!2^u09?w6mr2~zg zo@y^~k(R3#7v4g3hjnU@@vx`vK{0j6HH$bvL9+0L58?J<<2wYOJJ`5K9dOv*7LAP{ z3VO6k(W7v&g^!5x2>qM)I07$}l)(QfYSwEwD%^2wxG?Z+$A{MLkw%=?^M$qdR^za@ z^~Zu;_!K{uNnZ#>n+1ePoBnb;je2 zL3PjY)>SJEE|`8w+}#pvO{g5MCEk@dds)5* z?~6@^0t>6`%v1x@Vm?-X8o3FqV4CsIb|I~*0xFPAI?>i>NkXIT;Vw4$`dNoNj6b{) zg>{&2jQ56W;4x2RB$C1^r^DKa)U$;>Oa%)VL*4#Dx76t z=ZAWb70g7d{(ZLb908l}G%`F5*nv9@XFnEOKF1j5jWlBC=8()jXTiISO>nIpcNzOU z-HKCa@t)UxUSX9sV^h@OIchtoq|kF%bxxbA1Tp26ri`t#O|Q@t&}RFs;`U0#{ox^O z_dUk3l*n)G)opyVKfi^?%SZeuFqn$z*4DYkXK|_FAunMyE$*59N=40Ul(F$i?c&xg zj!p|~Ei=Y=PydV6nMW!7jCGl3Y)Vx>s}jbWlvyQA{Cx<6@$AI=P#{fknLN4M(%FIg zj0OoS+AB5gS07*(??YB28F(DhIOGj&v}P_aI(j%(1$Il=7?#`decEZkM*<@Meu0w_vQU>H>H4eU?{lqduPl;#Qj~jJa>j#VswtcbjYi8(OzMqm7M}!{HP|ERC$~DxZ2eB=q zp*^+m4|d`qBgF`3Ro$yRdx zbcHwRp~M$e?eY@iJ#Y9R+yAhE-Q}NC?MC=UY}!&+c=eDg{73HaR+nYQ&7K~vDk?;~ z6NyieiVs`F(y+}-VQVj76KUS#V-+<_PG^mL(!k;TSFKY|LaF42U!~cg3jEj>-p7gVa0NDE`@;XK0aZZiK;V>5c!3Gr zYi#XPXcFO_Y{ydu_84rV?crGG-Ojg(FATlH(w-*#4%X#q=p^+`akk;zr;XzH(mlIl zCrT|GBd!R;M5PndAwFSx7q^>;YdCxa6P`7A4B_x`RN;E!J8}a4_P2Tx)i_1?tDoU& zvAXv6DbUxkzrO%|9jlZx4V^)N+BV`G0wjy?(6xBYS2 zVx!U28w#@J8;#6TwH9zbo30Lc+24^A@KS|;qyc!v+cX)Vj}zaaOwilkYJ1S*SP_?Y zN6>r3x7rExI2c9#kzA~#^SYAJimnv#c&!8>$%CxdGe&Evs@R-o489uAHC6m3<0(1a zz&39(qATTT&l;~dn3K=CFom0;%ZK(_`5bD{`d+L)+}umOL}SM2iK`!_23mie97=#1 z!mVCV?5f1&RU7M5lLc-?2$$O$sov9=(Ib8x^Vw$Nhnc-9VHE$^L?{Q&?`RAzFLA7a zj)LQw^j`Tq*v#sU3v1yYYv~KddXKa3zRQcC z#&Lz=FB&&sUVPJw#&OJxTMPbaMCY2VqOC@XmV9XdMxB@h#?BFJT_9Zq4f_CF`noaD z*ftP_W*5%3f$ZGtw%kLt9%5;gM%}o?ZHrl#N~2>Ig2gq#Ccav=6sWzL72(}D5Lz`;1l;Aam8_%;}RnOX8qqZa)({|&H`;kdH5o^H5P_{s!)sKvBNrn zP2)XDGp<-TzsOmP*y2ekQ5+6WHF8GAL%dPs-?9^L8h6vO@$g;7yF9mhu$7VmE?U2M zY>H2|ijf#wd0|F-VF%;%GEa10R=C?Z?d&MZi(q_$MT+4Oqi;id-lqnCMGbvT5%o1n z2@WiX`Jl>((a)>aV)`D`Sh**uY>(iuYL7AN>KyWhIviTP<#1@ho_fpZ)zD^BHO|W3 zA_Ni^zxS^ame<{3Te8>1_S3z8$+o@2w%6OnEN7mp@@-@R^IgZ^cCi_-@2}V>4IDOG z_8EO8o0abfE_L2s2R!RxX5SM}F}%0aYcV&G?2EgC1-)oe74-dNdtFy|u0Z1a0CTh&ACMNL{4ts#3)uE@9iugQSOSBBT?Wr+< zY2yPVrCDs`0i$WtFq_{bLakqk+Ys_#8bgHJJ53Hf)@vS)>_t(TP%ePvAxMaeselEdiF!e6rGp!bL7i165zTY1O|{WG3d{$^8>I+++QG#JJ0w1@WSI?$3C7JuR92YEdG}BiLaLdvPhx z_TD`^zKF+*CvqPWjpa3>SH#7Y#Mc)oXD31L#a!CY|28@%aN^Jd ztiy4m5doN|TFgcsH&!P5Hdh(3ZXj)%|1wMbz!>Z;e}j!A7dyDNd|>9(^pP?-0)du-`pRTZC=Vz&nOSxt)kL>2>eT8WGx%8+%I#=#* z->1RT7uriX{Z*Th72?sKC-Pmoto zXPC5YF)jl9O(+9&fc!dyc~Xez5K-8;FAq1=;DiiiE9~k3PZ_uv@WZQ%3F%tR@hATh zf9@2DR{fOaorX~X`e~=p&M|J@cpAzi^tpB7G}@@w_XW#41N)-Ih%wNZ$(tg4*Wvn+LK4V>ENydhwOEMZqFx_;NJ^Aehi7HgY8ontFx_q!eP7adt)}46eoW+TCmU$M#rd!lSE()^Ge@%l?wiCBavc0y$T=!&@PM_0sKeiRY!1;t-PY@0wN zmY$kV`B6H)Dy{8>(&B#@bbDqngTg{7w^14O!YB#s^ZmE3Y7MxFO5C zV)U!7Hlo^tVQynyixx(jTC1;MaN*t4jP3B4x5z+Nn%BHPx?y#T&m7|owW4@yS8Gu< z+DI$bCBei%qBR?yV6Ln_tBoB+TM>oYVP&G(&l|~Md0ovGY*wP#-5bf}fc0sjc@T33 zdF*%>vpzfEH+^&m#c{v+h&R-em1rhZX^1V?ObD$f({%xN(9P)tZ?xe9Hry*9@FfAW zobVTIxV|Cab%wz2H_RShTu~b|&6hmM)^5`@JU;ai4BsDN$AjkGUfi@S%T`9nysV@C>tC zYIs%+Ul9E&RKJQ*_W6c*WYr^7bAnoAZOt&-dAz4*v65y;$E8_pX*07PYu3d4I>xgD z+tS)hWOIJeo3H#SNo7wpHQ$aQnc{6Sdu4NTn75X6*p}vIelj{S*dw)nxN-#tv%cb` z7gonudJA)3TxzJILS2ihiHpb5xZz{pWB`?%5FU%I*(9DZR-M+A*-(Xbu8sLEK69=%`LC4&N zE;gO2K1@}1JiQf&TD^v@<~`Zf97tKn?nbq11)JH;+y~dnyUu(pzMc9Qzi1@LMaa`^ zQ7X#S$D{uCgUsabQ&%&+mzmN@UB&nB(9D1k|7$$Ig62_IvFvjDvyr{bPTqtk*z#WH zJs#|!44L11d*-wFeDh^*?|il+A8CcF_cn1#avjU-4SXn{b?9Rr^5*BW#J-f5d^WtV zz%TBL7L@-CtJx2&BlHYg+RvQgEq{6C^=7Bk&_?Xu7{PajDLi*QqbUjfgB4y6all=5 zJ&Ju#GTVDSSVWRpul``+YX}xOo?7f&f6^eht6~7C%KNj<13(q-&$bQ#RsJxWYUDsc zHD{pN&M2Qin-g9ksagf<2B|M3r>c!cX8fvIIjXiRBnX9+4fY-Y4FnfC8_AE4UrQM~OtY9eBbu`+c&|Em+d}=6KNv&BdahRE#T#Oc< z##=n%OCX*VDo(!+ABGHoX5%nqdBrSN=SGME1EM}Rf(Lk3-bk5;0wNeZ3x}IctMJN; z6TG%TNenlSQRAO@lTaFqZ$f&(Bkg7rw#95V@@6W8k?i=*XrslmR*o>oBnd@?lOycf z5oR;B<80_9_Wnnhn%^=4H5sAjjzm!+bmd49y2~vHjTDc&#Z1qP+)WlUx1`CO#N?Wg zR(Jv(s^+F8&uQo$w&fP{Gm3rrtw>$*EVlht(iFJu?^ZLpI_Pb4)Rs&sOB`i(OL3A% z+dcotXj4tep+>Jp=Ch(vCbs@eaJnVQ^cyxGBdng{H)U~b9!7b zDUCIp8?41DXPM2t2a>F>W|^Mss!^GWa%LN%0;jHCMXAr`We5APM>m*lf-*^2y^3et zK6C0c_U{d5BhLZ$%LX$8PJ@4#Ej?XW-+!3BJ>%H2f0)UC;=IKYoNwiv>uxlA){b)4>_HaLG zgk7`K>=DJz+i8wMOiSO*QYN$0JI!WB@VzW0`eP}tnfZZn@N<4_@@r=Az;<{!KlTQ^ z4E_BqCHiB@uba7n!h>0g^JBNXZcd5DeeiW2_bCLM!a7!(%>v^NARhT+lPW15fXeys=0A=6HzEzrk3IJWxL$^r^JAVj&2W`u6|$3WnmQ!>_d`eP&N z!po4u%(KgE*qSFBsNq0Whbu`Nq6t%ROZXxMWpC^hM={?RO@w~NI~AaQ2|H*s)SvN#-rFGAQ%$r3Kr%r-7~7QRzm@OSuzp{N{roU1+d zuZWpcDy4QF2)9%dJc`o66*v*F8^1LMzbyv8$XhjWs{yxl@xyU=N^F5sY6GxvOVS`|K?*^%AG)78^`{Z9c;kry=7KwC_OVESCZRRLXJ$HHtF`_ z*^{9+Oa7gu%mmd~#FNS9bqTg?cphFI@vzy*PTIYP zA-?UO!*G@1*)#BJatdD6q!-*wf7K+l23(iDaluSs2}jIYHn&Dc%uxeIp2|{&xPo>E zshd?l!0z0y1YFNW|4+c}CCuJEV(yBnF;u*ft*4KkGNE|X%;}Sgsq0mgS59XsbKqXa zucZtA72hq`4adw{tlcrQy2|NT-(zN06B(ohS`>uiuxJaIN(!ch zRTI{p&^b|_X9bNC4Ff2Y}@}U(Xa-?r3NP94ZqG(P~u7pxD>7xTy#=OPq;eVL2yZaGTb;DKLdOW_}>GV zp$i_)pp=>zx&5LpO`bM<$af>6u5sZ4DXEH@H!Inixt`%BZH$#6{XL4 zSSCnw3zRjA)n@GI=@X`AO)s7>X~swiHnUXmx$Lyr(*ArS`gsALSu*S{GIf-d8H7YkMJD0pfE^a_ zzY#DMnZ!RA6Mj=n_}>6GiPAS$(ji%Qgr5Pf34+-Cy!fR#s;#12M0zI!y#znvBjGdn zzFIJh7>3oEI&Cx+%z~d`(|~S@9d;Fa?hMR`UcW#$vQOIu+puP5&AOg@SogDLjmfLw zO)8Rdw*}uwxY8<3QFh=PX;jj>c1s%pcNMA#{q2Q6>@wvR{7%~RBsqycXZvjjJ*A)% zm~?>4VfMyZGrek+VqL#7lho{A$=n(6mD#@GW_$(^;1#(4-FQ0%iW1B7wb?ALdfp#d zN-jb@iXZg^d4I6nZ_SR;xTx3fF?Q7MfbPXg!)kfl<08IV3gdYan$pzzGPHyRQJbUyzvv;W^oeb2qF47Xf zG%k_&Zvbby;6X4*-ANe|1K%72-x>pt5pby!!Q>c%nKAI37>M4JR3+XFy ziGtn-m*{K4HQ{E!C4QN3NxJRflFqnJ;H^7(+xL7x*O2sK+EeS2{krS3=-Z7*d3%7S_I)^RVocMv+9`He4zO>h^Q--a3kc4 zEXCMBqpz4_L(qr_b_dXRL5mTYgy$m|>EUK+&6Hk2A+-eo8npkJ6?L2|ZVGnHS~Rkm zA}id)qGrl)1SCb>9KWtt2}p)^Z%kfQ%jQ!C>mU*$mGBn8O#pt*ZqSu8%Uzfk4ssI1%&*+}Q<>h=JF{zJ^zL67CL| zx(f;SwDGa>|FlQ&*4)X(lkrbj)HSoYvL;)m8Gd;-Oe*rKy+m5Dhiz1Sn9&1+*vM&EQo031WZeD}KdST+-idE2dI?AHo#uk~;F~%;i9d+% zM)>WoE{d@yz9|QgFWgd5u5l>U>B0gQL~T6l9XU?GFyJX&Pw3-c2OO_NYPBSR_0E zFjWx2`F<^!Qz}ts&>*NWx?wUHBzzWl8lbyjl7fV9M8jy~f;R&u6(#W&V3N9oj{wFX zpw#g=2M>1yKLO5g1^8VAaOi8HOuM`A>42#s$p~5jZVGtnl;UZlXUxdW?UmoXIh3s4 zKAuO!?8#6`fNfRrJH-3J#o@7}+Ei`=vl_>mr! zbOHw}jz;adX`n#Q1RB!83@*g)&}IU+Rq!lT(g0KnKs@U5hZ1XAmi;dJ;Bt(+E+{t`}WKH$a{3Tkj?5JIy$(le0bMt~&)stQFm zvw>ONl@feYZie7D$M%nHg}lbkG=f1eS^%2Kpk0Aq8h){~q^?00->|B>jwQ1->LQTc z1};*gN?2-C2}_MCVX09${FfRPHJuZ%YpMk+n#izH5lUDpLP2_=S}?2job>F!o+Via zoZTAG`NzlfWfq<#P-eS8YaA~++YP%QhN!3RH*Mk2);L`AW7hH%=*~fO)4E|O{ z@fDVi9X)O4tm(xws4r;URG1XY5F06G2|p48SJ*H}l-P+^8D<-3n!9-X3vjv%t_0i= zd2%AzCp;YZ0AP0_4gn@@E+Zh=jsJx3?2c#6ET-2E2HQ)z^YHJEaBZLj6Cnxu+uTgF z$k3OL}EAcMOXIJ)0|)2w1|-)(++*&1s&^8{(s^MV(-VXDb^}C)h0M zIDDy0zGnB<3FfGYEwYttcA*ZIPv5H(O!elqVBgjW4osQ@|4fiQZH4Lv2YG5A$%K^* zI5t7ND@kif6|`EtV0)E+T7ByU-*8zRXrf~R3tNi@nh0f)&docOd$AWA1nYH_*m1zN zLp&0G7H|s}ycsZc9wMkGHCV57X&X`Npm&sw`1ZhERhq?>g@j2B?*=ZahPj4S4!{p) zh;j@rDJ4ly8nO-&On=h7Xor_Hb`ndKr@(>w8=2$9dznmPsH&c%cqGil1`>36l3XeB;7o15IL5^aW0v8Nga8{Xau{?xJ6d|T**&VZ?H zUk4Xur<_-X5(;?WkAS0dr4rp7!jU{_3 zEjX#Pep@jL_#OmQSQ35+fvA;AcvTF%6R?|pZw&l7V6ypScw8^aM>`VM0YisVAP(8(NLY3`5{`f-4L=TBH)RB0(7bnE$NX8r6m`{g7>$xH zXw8OYL7!~}d;@4>OOS@(&5Nf`pUS6if_d3|lJOf*R=Wyywd~+nNNX|3?f`lveo3ss zM)SH+((6fhQ45ps%lIZv5~h_@suU8g3D`~F1n|{jCR+qbd3E=ywg`vWQ*DC-qkS7q zN*U3W%pTdwOg6e*@Y=5D@k!=z33*9dIewOt>`t@gQ8% z>kKYsQ3l&= zESI$;ESI$;ESI$;ESI$;{QqNFYg~VnDN>(~2A&32!g5(l!g5)Q!|bju!S)Sn4iFt; zBe>LZVl#Pgd~h&({hnYFEa(29p&n}>o4nVo*K9Aq>Hwwp2ne2vD3(Q|@xc*oF?0j@ zB%o=jn9OGhH?+0>pMs4D-lUcd%vL6{c_U!+iO*%--0BD;u1>6Uez0ZMv_V1yyTF+e zAz_+gr-F~=E<;vhJFW}Xh%caMj$Rl1^CI4IpvHi~r}&Y=lCWIFldxRGbHg;hAYr+P zCySRF4~ap-ALBdS1%HKazKACYz9bJ9!KoOS66nSgL#om;{1JS&aKZ1zz?T50x$v~Y zG=wHoBm=pKCtE;YUK0@Hl*Tk}$i}GngOk3%mCUPCyop7t(aybG?EMy+uRWd%c41d6i*o zO(-~UOyMw*rEAd{l9rKhAHY=h67CC_>WYN>0dC@gmjKRl!8DOPki%?XelWMX4A&Z+ zD*k~Fdn`ZLt)cXP9Dd{ge? zk$_{_!brHKbk?MjarU~E()m6yuDOVSvk>4(R4rV+%fd zg>j)YZ;V&ETRSkRz{OgI@n4ls4vZrF`iW9Z3_ z2fow^P%Va_W(-4u-3*gsVA|N@#?vyfTary;V6yR(s0ZgMW{s{7whYO{uK~_oD!-ru zY46J16~J!ZzXNvSX3MS*W;N?SGP_F6z_oc-ZSQ2amX=JyH09`$=q9Q~2z@sqB!jgk zeiELC??x_oF}|t(N&IGf(~wQVFW?)aB?qp=H8m>{!ILwar4|a>H zl~1n?jxMddMRaEh2&wy$a5cbatW{u&N#Zr&Ny$r?dL?S25|$Q%gj>hpZHuAQ3D5@w zlyw<^;O;J1niLX09(XdmBs@O`E{}ol2TY=q^bY{eQErTSJPMENTm)+Yldg~fo{E7N z$G|jFcIer`fx%{_OGjn%nRm%zJ4i?!4KEXFO8V0vn*1dkakGN|KER~LC7uS^ZusAT z-Ff=}a6M{_GQh|1aF;GA5NZ$-{|R6x?ePB&u)8!b00u*cp0ta*cKiW2-Gz@wgKI#= zBO~y_!$~m<6a)tqOB5YApgv2&3FtuF6`>B`HZFV`;N~v4C*XE2xHn)@j+`HRqab*# zDn30oVC*Mj`4_0%rTw}aX1ClB?A=k4?f{B90SPY!oaTZb1Kdr*>;uG7x@t^zmDX_& zNZbW{3b4DtXv=~-PZwhF{{iflcQ!_w&(tC4n0AlN=6Y-L=$T_Drrkbi%DCJ#Oc^RC;ZLKUb8t}wlxfq8$4@GO z@}mjDabgzy92-3(Si5e0fK<$qRIUV_W6OpFGm`oPO*Qfy+ldJMa{y8X&y8j86$O)X z*T#gV3Cl|Oq3$TnF;_`>rN8~~qlCN*7fPJMr;ZM$+=Gucj#`+6X{OZ; z9|zpig+BwBYNMq8io>N*57N)QT?7Ll0y0QsfCGTZE|Bm+z?m-i5MVNJB>pg9(uop& z6ENv>3BLunDdPYC2zwv6T*o``|3NI)ndcDNWI_lb#2T3pLI|;AvW0Mv2_Y6w2qA>1 z5kd$dgjgno5X*KDLbkSLvSn*q+uHVfU)}HLEa&z8et&zt&b&X@{kg8|^Y8lHcTdmr z^p$}Snxw)o3XA2J!h}WFgS`0q5c1*(-GvfsCzJ-bew_SKg$l5+B8jHH}==2(#1-uXd%mxb49+E34m-OImK*XI4s z$E-QRh3JKZV;2yg-lKaj;lEi~oQ3MBp0l`PG|SsE-kxN}yX0cVd*xO43SHxP-p$43 z6Il9F{)HC}l5+AzgQT475J@@tBEn)h{9w51Hoo*!b4K(t+smkgG$!TbYY9pD4_pgn zkd%MFiafcB9L!#EAVb|97eDi>b(fTrb(fTrb(fTr z&$>xD`2t8%UU&hd?X2N-H`-`|EkbKqb^nzwuYHZz9MCzf?SUV~H~n5+P1K@Sy-l<- z9&Qtz{Fjh^<;LE}Sh!7e)<1lJdC6S1?R+eFY0w~1WjaBoKrw~2Mi zk;82QdEvHDha9aJ-TT{D%Ky79^fN|k7ViDQhw#54#)7Rc^WSjqXT5Om-*5^!ge2TT zQqGR%t#x+Wp~uGy{&yFq(0{n*zFa+{?aSli2P77dNoTO)$_IyYqRGh(lR5{Zvl+Tc zIayRmIsEJ$9;g<}Apl8vj_aYjFOm}rzn@AD`~!t>qfN@;=l#VC26^#vkQZP7 zVwLMbUVQzJt8wNQZxDVSSZqM@m?RBKzJ#2VlcyvpCr?RIPM(sa+)gg@7dd!af`QQf zlM3OpcRMeVZ(3!-&B%*AxPF!EEy&@9nOtvVmFwZ7dZ7lB*W2=|;<<^~xp`j+!w!^H zcn(Wy9RrPBW!p{iF z3BN&J9HOyR5Eh1-#IFI=~6C*=a{72g&cyNln0Q*&p}D~dE`A7$>BL@|D@b@!SeV4$0b!a zBs}4nJ1K9D94aCyABG%`KvF&)dGXd~BQM^%5qbZoAA4cx8mqNsofc2uX!^qc|IVEH z6FT$L51baiX0`QN>v;?HSN^r_UmZVty^M?UVmV*=*Y-N&TXZniv&z3!^W{@R*2Q0a zYDmh-r-r1Qd}>I_$)|?J^8e$hVFlZqLCBI%4M{oq)R2^uPYp>q`P7hGzB>Q1f zPWHp3oa~3I<|~}d{c0P&dNz}C@~I&yC!ZRUa`LHRL2g_4>{Ig6|Lr#>VZSwNE@8j6 zC1=I2+;rnhqc7;->UY7^UniCJ!+>uz4Yw(k5*gl?`>zD6Tg0wipIRyAV3qqTD$G=`*};m ze@50_r|qzF;_J0tbrwHths`c;+wk1@=4-~T;7wd@JDnfjt?iTj;!AePL@wfb^4B9t zIr;06q@4Wq2y)w_FE9P>=E)1m--{&Ww<-**mz}hP>w?-JiRW+ZQGn5KVZ}JrvLY^Ko*|sJ~^K^&+y_0x|=b5p9^YF+P9jw z=ALv;&KzUmK`uNrr(G4@igL5KS;C}Z<%gKUKH-1aj0a1DDTV5XvzEMG;#g8X@%ZZM zld7^R4{Q5k=lB+zRfwa#z`s=;UNASjHnMjo3kA)y`4=9rl5#T~`fyUd0nXxI zc>7;+)55DUe&IcGZHX7xUG&8jA)f1U@8$X#%xT~zvtINO<;^dQf9roYBkHz%>DkBg zrmfSDKf8vvPHu7y-wD+Az=iSc&R9Su@5R4Rxk))xbM7MfFqj+K%IlSI_>niMeq+xD&fbsq&y67$-nSfjfU%@r{*E{3IF>)WiF@cq!Z3PW#Ll?v4X3& zTlvn)Lb#Rrr!p@*h3(n)X=!}pwvvnEi(cotC2x!t|7ktS3e)HTibsx_rNkH3<-dDk6z3%{G;n@bm77G5lG#@wzu z+Sa=+zQd-;@z8gJ6RQT2FQz%9?ZNBfY5SGj8HFeO7AJJTqj-<0f{ zl-vG&U3`lryx(!bfd!Se?XTzM_@s9DIVe0rC*|-<&~T)a@;_HuJ^a=pShLrjdu_H? z;huXHZuURj{kXPxts{{aTXsBhI9sfpSjhYtt0*)ghclbpJiH_pe#A-2w<3olkd*I3 z4w+5LgR5K*uK|Yslf3@<%IjZ`VmlocSm>H7!@V1K)6k=mbH0tdc#ng_-FDISGURV0 z<+hJn;=3%FxGQhr$B>03+BUf%zV#+qcSk?)Cs%D)yi42hH^jF)qzaXA^pYyKud>lC z$e|A zwij-UuYXeV(m%PhI5;~{?JHH;C=YpyMH?Q6yf}fUuObgGp5OM}o8p^l&~Z1#cUdR7 z>rHF59s2IN8Euc>6yJ8Gm91+n+Pdva^qsm*YkXtzz}EP&D{X&#@dRuPU%V6AMsk;Q z9=8_z@}E_%=W~6r{?Uu|+t$8$r2%{Y4=(^$9<@uEurfhx96sf=c*EkJKVtQxdfM)|Eq=!TZfCT$aWOp4XGVgd`|&TYJ>vc0(T<1@fMYjDTmoj_74d;^j(iYY zdv!E^Fg(QXY3LP+SSdoo-O+_`i>u(vKEh^)@~@;N;_w($b4$c!aH->m!<7$3<43?V z*F}6JJo`%Y3Hoxl@!n|sC^%imj)teM;WG+hv+wh-)(w`yjT&?eJl7NH`~Y5YU&P15 zb$W9`VCS9)muXxT+jvWKaIxEfXn#ynBdHhgN{ar2gFHrYT#VcaTYxO=#H^Om~b}#YOakYp92^2St4?? z@J^CcH$E4+MQ_f7yZA1pF!y}^<+*4b9J?YKzW~g)RxX6Qb?iwvlg}lD^#?=#XYPz9 zyuiQ;3+hF<-tfKzj~k&OcuH?xhMQlF7J3DqcKlU%MjnRCO~-3+zJ|UIPb{oS{NF%G zv3kRkQGx>bv}Wc-FN~XGt!Aq z5ylmM4R<)$_>7N`&{Uc@Qg?0Pho;#pMfh3`F{1MvI5LUUXwuwwrKPZ*Vd!nK}`f5EAyX&$cDn}5SquJfOuV?F&Bp4PG8X`17!!I@8B zDEr4&N651Et^tod5P1-ulB+D7@Tyt1I%~np-7I|nT#=ro!WDY9He9XFI&g{+3U8^J z)Uh-;QR##w2x)ru4R}VY*M*DSAPzTM)#1Hcv$osy;0jZ-K3r%N)8QuTU<0_w@$iyg zOW%T%iP%O6X*QV*xY7K56K-~Lc)J=jjNq8^#Uqx8Ww&*%Y3(4zl1G zc{8}>Zu|e{2(6Jtu`L3-0e_f2HfsTH3CA^bE4bMWwual)&w=MPD7?VeVzjn}=UivI zpzmI}q5sxcMBBr)GJjhkR&2O-glDxnydKx;Io<^>Q70d6vN!As=U6Md!KLba2k!KE ze;3Z802liI?g&#hkUijeEiHtbU35=)P9we-^ev*j;8b9GiF1@V2B(X%i>{9gSyx4qpM*0k%%|WqbNMvf?c{#A(eOSK*whTbO^!bo#x2I@;VvUF z1P{DS{}0dMFC#SjO!o>r&4n=jDxCgm#KUmr8xg+-x2pd-T=9A|{sug+{s=s&&YN(m zr{FC(&0g}0(Eqz^KBHV1HAHX2-CFufxJeIw1vl&23b@Beyc2Zv{#`ik2JZ!Z$H(9< z3;caJb0NB%zYh?WnSu}DLGwBe&sb0&!PVBs$8f5Z{0ZFcq7!hMUVaMqIR0z6MWcTM zm-sX_3D+bnkl!NYT4=w6v#o>Q!&%nB6x?7{e-?Bc{{uX$p`XJQIx`J-8{IG9R8PJ#r*vR9&&sZPSg9p!tsZrg8duZ<7R({=QL;zZq@sLzl8_vZF+t?T_;gFJ-Ebqg*6|ED z#WlmbC+Zyk7M$pF!o~<4hA|WFlsAD>>}cWRGL;rr_@HCEMrXlgdbT;7smEKu85)`m zH+zi3$7=ebh$doNA=GQp)^LI0&4C-O_VBy#0z+zxQ6 z-tP!^SZ8@~|0DMQoe+9#IN|eKwI0h|;Pi*1bnG73#u7f$mFA*_aH<6r-d0j>Bo;pB zrEz;PK4wuD!A&~0cj&);9-DpOOvAM=-0yfXoZ-gdHv(}t-XHF@10Dbm*|@?7$hu75 zfpD7VKD=WfM}rQAGl)>Q|HMiW(p~frxK8g6g@;`6C&F1q?j(3f zos;2Ii+4F(?V6{;0}IjR{GEo7XF;6~XX<4&oNKtwg!9!o3m!BzXTvReAKqV)X__vA zvs|YEt~a8W!o?QpWpG+T>#jsdc`z!pCb-YMUIlk}%&vyB_3|3H#D$vS7LV4AaE)Hx z4rdy<@aeQ6jSk;HJ@jbwo7hARLW9TeEV$Om;jKnphW8ve$BoZ}i_PWvaHq!o1a8pF zdbnQ)E`qz%Nx-cddIdakrTxDNp;05Qf>Vve)o_WMHNyp_;5xX_K5;!fV4>XrcWd;G zaPu3{gUL-n-?^=DroG|jHOPPdE0I$8bmv4o$-QYI3+auQj z7rJKnl~dnMQCjbSvrNaGa8WQQ^#4wT^w%RJ?tSN? zH@fk2@G=bze-@+Ex_KV%u_gxLarIw-TVJRDb21iw)i-V~UkVdc8iKPu$1lTq_Ji;~ z$4pc9D%@-2h6B4<_yZc*uJbxvWWl}x$8CBe;YjpbAaBCyUU&=6kbeQ^yYXnyF_&+{ zvEJw$zXSK^z`Jm%I^h?TeRkFG=FNWjeK-fl7W)4O2z8$O58=2?X&lb=+;T~9#Exrr=`3 z_!(SbzW)Gcd$c}>D;=MPn=RNc;5?oABiy%;CeGiV5K1h-8F+;``x5T5V*d;`YTRGo zQuV_hQAslee}$W!`*(PSQJI5tG%kE7xYDTn6K+pehdT{lt(Xm_~9yAi^ zaFs`H1Gw3m*bpwUCN_dQG&BPq(t&TnE$V*@?lhtsr;z^~D>jo0(^|a=JZApB4NrQs z!XMFTb)hV{)6F)6Gc|g1IK!IQ0v^_gY2_umY zmpZ;HJmTGQH#pC^;md($^|Amiu%5mPcj)BqaC211iG}w|mYTmpF0||Ao?)_G?|X2r zM{6&*O#LFb@7gFrdk0o$A2{0->)Fxp3Tx&2@Nx}W29H>P$H1MY;0JIpT zHSDLtQ+j_IJf_a+aF&nW)o`u`odIWS=#SxQqjDxZx)2r4UkyT$DL5-kaG|r|6&iOA zoNtBK!d-^(T)4m#oEKP~^Wk2*VI92ei759Mz!ma^@OVNGeu7Y}5%qA9`MwCQ(dvug zLN^O_Q|ovG9Dgv{;1al7|PIdn)?>G$3<^| zOI-9uINgnJf-~e+xZ5UnGu&ssZ-HC9fwjS7$>;xegkg>NDLk(cx56vT{cZ3v>!SlM z)ri~S3diq&GpXwEEO{rKtCyW{nfiCZS?b&!`hU3>?%~3SMs&dg9>06xY$x0Y=h;^8 zhf57O{|m%;>(-w?dQ&h;`}VMt$r#~gnZ z&Nm&yaJAmQ2IsoY>+qlvdLxW$&lze0T;;cz^s(Hgw}$y zt%>kuCR5f#_-5Y;yHr%Ljn+6>X%7QyhFy6;9(j-#6og?9LJuZh!H1sHV#uIcjJZLcJ#8T!+Rp!VxFqt*fmk;PJ(A$=wx`@ zXq^JLs=pi_b6AaIp@A_l-}|Cl>mDHNrBjJ_D|{L;V;|apN=Lb~mVj>rL5N zaEXha4VTL2z_X^HHjEpIbKwf>>AW@R|CI{obD_i@PzR41(hJ~8Pr-$7zYz*wcQo#) zsfQ=zi{RmwC|Vc86*?9oUF!M`@X$gEIDeNQ6k5rb!ev@|8Qf^-8sT!sFNdq`6IZ|; zMx`@O$JCj--~kQ28!mI>d*CUZ>4Iw#E_83WVBfwEPJKM`;C{GBnC*fsA z=qY%G>3ce`#n>NoJbur>Rae>npGBC~`=7z3S~ma>8ph|~G(Gq^9G9PmYmMR{TxJ2j z09Ts(7vUO<`XzWw>K+3dkCe5dJL}B()ZyB4f+7CbNoYig<&6uC$0RC;N{+$KZf&d zP@ljR8a)Az>)5AoVqOn^jZkLTe-kE{%Sm{`3BQG>-0XL7fgAiDp7zEw1<%Nz!G-Gl z0j@JmpTlWUf%E=9gxHf&wSNImy4fG$X*c^5T&-s_@T?*I5-u}xe}>EDzraOqJPXgM z|5tdqNAzz&KiU8P9+a$uIXFdw{sC7SiGRW)o{oRR%iQcgaJ`=W7jCdKcCJqinWnqo zS)+0{T$$_#34~D>?SiND{$99P5AK5}t%LjFDyzC1o>u<>c)8;b1|5xl2rhA*9=KYa zhv7L4TIm0eAf#UtrQlJxMx|c3QEwiDC%oA_4marW6Y!8nv=1JZpM;y7`xIQI$4|pE zrnP^4`v1IPenz9BYdJ&44mrtmvF1&e}+d**HVZ}ZMH+u>mhnKs-6L8${_Q8!B{UkhVJv{}-?u*uc8ZPHa zX`%o3Beb~aGjNTeem1a`{2V-PYJLt^=<)M#rF_9Aq)CG=f*ZX@TnEQ>GJFm(-3YDr zZTf$TVOgCEGv<4Zprkh`aEey13AbwKT5!AkHF(O%rNSMKuMPK_vUT7L*Zex%xuC=O zOGBvAgC+2CEBqU9t&vz4?sCz1&{2OW9BYa~x*j}dsMinUzNI@Io-}=ef3o#7hS*#*ut68Z3i#k(uqtYf=gnSQ9wZQiZtYbxRS{M)ge{Y0& zH`@npG(`KtlWtrL$Mt?cxZbGj57(Kp1A@L@mcX?};y^fVgboUO{DgJa-&C;tFW^HzH-oTUR5fz9`EaE+(thw!v({s?Z=nM!!%W%_@3|IhIV1FuDV z0-WulC&K9(Q3X$58+m^coZ!V5;|t-;$D>I61kSdZ)WdO8a}k{5_{DIo=?D(jS|1Gy{ojJRgbNvZd@0U*C6zGp&3rqpljiD zkKA=|qbayPjO%3!oNLN%fO}o%MmWm|-30e*Tr1q%97XPCxGG`g--b{=92MXl@T^Uy z6K>S|yWm#yeK$O3F7JVtyG|FJX%z2;s~x`&ZgJ!L;VzqAq8lOCa6JI0n(qhUit8gw zAA(y zr{D%BKMi-7*M7Lk2t5O58}?`6X2*X9#~z4`7=UXv?zzza=M44FxzOT-=iy4dAB0n! z`~o~+E?9@oM&WA5--gqi`%5@cXDEJ!Fl}R50cTj@@4)qX@Gd-~ z&U7jT|){|Lvfi`M)T+-@po;98CT63($m{~X$3uEJm74kygQord?XaGjI?7RJ^2 zJKUrZb8w^H|0C#lI{q2hNc;=VG_CV+9*t|E|Nk2y*AV>&&e8k-!YO(azRf?&NUR2@ zI=(ubulH*Nwi~9v%^J5R+-EVa1?TDT*EZ$(ze`I~xsauGYr_RDx(?iBB)$%3YeX8{ z?f8%;w8nhwY9h8w_LhA{(fb%Srh z?ee#Rj;Yxgo^!KIcwXKFF4VCsIF|5J%bNwImZ)$xhvS~nE#M~enhiHwy<5U5&fN;` z_h@Y$bkxs*yES?nIL{Ps3lHdIVmpK$t2#GK(1Y#axE*Z=IMvN|gmbNrJUCrLcY?DX zjU3n+Zn`SsUEusDBhH6=-D_7k?K=DaZU}=~^c}dzycWO%diGto$k6Q$$1T7;;6Zf? z;TFB$6E1M$@4Cv+pxQ0Ey}8h*b^E|YPS_W2b9Duc$H46xcPu>Q z#>c_M&ixVGV3(|fb8OYe!-;Hjb^=1K7fyr=JP}oJk2P@;JnRN1!|B$?DR72$upI94 z$ejw87_HObUekIyJQSrY5vxWRanUp2VRQN8Fu{$_ggZQDHE^bzodu7me>R+Ng`WeD zx@IlBLOvJnbItSMjO*S*ZgE`!ck2C>aEk@i1P`iz6+GZNR|kEKz6MUW zi8aHeI(9AGgmDY~|2l*`i|+a`!HrwsLhIlLINzeX5gs+{H^I$%*$QX4+0Af{wRH>J zV;@0Q8J>=Z;2u5h zf%A>@!*EOT`Tr4wKD~StuD?Dqq8HB5v&Y~v^Y;YYpiV#BY;Sl5ZnZw1g)?>RXMs)4 z0Nm{nP5d08#218Lg8MaM7*4ffUxNoNuGiswBk=~DXM{%JEH@a1yN$}*aJ%hx3~sen z-iLc`-ZA?ApAQf^RQeFkchLzr+gyGM7g>zIg}XcvQ}Bpk{|rvk=s&=P=KgcI)Ags} zETi(5(Ep1pz&S1q>E%D*O!N0oc=(Da9sh!JO~*Vu>c(4bh6BUVk8j(;*{?^uT^N^l zhVz_zD4ZWSL0_mu7-xqkKP=O-K#<)9|?54-XoxXW$YIdKNB~e+C!2*#Mkv(LEQ&jqcAA z2t^9dhYNZ+7{;Ca0-SG6ya-ol=u7a3g*gNdY0%4XpWeR$cUk$b!Wl+)7#>D{q5r>z z&}^PwhjX;_4Y<@I8i6yN{3cwap>M%udi)Ex$Hp=W=eo|@aGxpoCETxZzsjcn7wFjv zE)*Myci;&_{Vts4#_z#-7T_3MVtu?1Pgz4Bz}YsU58+~?I1U%O*GF*sLL=h*eT*<- z=stlUauVq-Sfw9k$rD;2s_L8a!!4Q{f8NNvw^~V(!<0 zi(TmJaKAZAgDah|1fJ2$Z@_(?^>yJ^*NMZk>MVuFJeKRhoknqexTMMcpN=r+gbm<+ z7u^u7P%z9G$k2P~p*!nvm7TX2D)-WYDzpiH<_$2JK%-e10*Oa4nOqD{Fl=(*2= z%T32-aIaOpIb3BVwt!cdzHGS6b+&{%+;}T^UdOf$IvSA!cZM{D{=W^vxP5zDxWtOx z4jyxZT)5On>Fwci7uo^N@qxOS?;R1`U z6fW^t9s(CSekfe6mxsZ*I#33$aGk^9K_h(xJR~2PK$z6Ja=7HtsL31!PkCOChL`E( z_u+2Su?+5!kAW+6;0JJtsW}!dbaSQe&xXg`DhI=*i6u4C5mgmy{r}X|*E({x%)8H{fcRF095!GR` zDL4bJ(9jn?`-EV_`UK0RoF z2d(5w;9;Y3DLie;E`!VUz7ejqJ}!rcoO=bFmN4vBBIH>(O>n=PT?JR_+0}5j9$W+G z=vgy7Vc4&Qd(^oOt}r#%!|mQLTHqobPTUZbJT^Cm3s&__@T7~j!prpLX1LhNx4`)t z-3Cva%67O{BYq0^$+yBK&bj^rjo0cC!cIVRQB%obS!%A$Y(v^}wTU z{BY3MnMdFmqw*+R;M`ugGDJP}|HlwY4a?(jx|TixPkLVa;3@e@c-E*q1c)9`?m z-wzkM*)#CCr|DU^%5?t>PUIQ70fcEccn&W26#N|S_Y^!2Pq@$^Jm_XGz?Bx-i}0)l zy#$XM-Jzgk%3g-6BK<_{6@+DO_9|Rqp$)@jM&-4jW6oZOD?Rsbz=Nh>1g`U#y$NR+ z#kb&DQ}7FTxrUCyL&^7lzKt-W_rHWIH0W3Gh`C<@S9uiQ39J$C!pj|h4=(lujlq?! z^FBOh%07V0b?n2?SZ3XL94>M4M{uvtZXd(TobU-;VI(HtNz?HuTxEEF4G)`|-@v7= z`8hmdVNSz^6#GK|{{o@Xo5vsFYQ6b0++oxB3q0bY;SVE?8kN=He$V&n@PM_l23+RG zDR8;GCS2qxTWfpz|D3t`8W#qgoC+_uO4o*~G;STZ+WdVzusUf$U!5gzy>;*nxWdS- z3)eU|9(ch?&fijmAvazxTyW9#;YvfD4p+Ou2Jn<&-wW@xHg4HO+gksXWeWT^!0Lcc*b?MfQ#$_+3+$` zuq8ZiF($S~=(EtahX?hb=sv=(_j|)NdcP06-0^+kTE~lnzDDmCbRLMj+#k-j#~cvG z)hU7NT7CXM5Fyj^dJx?DM)dN@!Eo)X5tqWtJ#vS@ofhVyLC3rv2CuL%%iuc44~J)s z$`NpudmVXS=)ZlDrR7{`uyBrohioiI!`V*wKD@#dEQ71{=9s{G`~$ew8afv4($ETc z-eNxvt_mp&`~NTqHi{p?73QfD9<@G>hgT#Yzu-B&IT4OM7CBG_S3373xZ90ShEsI% z6u92PTn;B{wE9$pc?;?^IOcnTPlv}0X*FE^WVG2C@VMg*@Vr%h3EXczT?&tB^ks1D z%4lvQToXku5xX2=!iBDYC*>>Q0t=@JPI2;8aFt$O4KJ6k3G69ohO6ak;Z(i94ledY zTn{(4B_fMj5bDg?4RE0w-v~DtuAAT#L){AZ7~Y%VDUH4b9?<(XxZ0D_4%fT>PvJ3p z#;pm2<>vl2IK{AUem_?0@fL8cg_aGcIld)4?Z#WdCH9G};c8Dx4jfm18@S#Ru`N8> zZ2#X5q14H_aHAe?53fLJHBz?&Ty3a#gwqV^&Ty(x*(I<-72Vp6w17nT|c+67yFG*E|^+wKq8qJNF>C#yU7Su&F79$CB^= zJOrUur9wbr{Du1+OfYri=jZfUdspMX$j zo=${^u8%yfg6sA2BzRJ9PKH}G`V@G~Xf21+EWlIY8hgNL@PxH>Iy@;?-%tL_4A&W4 z7}x3_!|mqvOgP;XTmaXZrVHVE`6qDM4Uy6H@R0R!5j>^Q7sJ&a^#q(Aj%Dco4G0r% zdzsIHnZs>`^ zcsrb8mEHk2S^0Ou<)*9?&ak`P1$Vl^-EfzD4?L+sUGTK&xEF4IJP~bnAHsk}+z$_% zzixP$p?d(X_3S%aK>ZNnh(R3>O2DHdxCo5xJCL{D1=nKd>kHe<0s%5 zE$xHr&E=DDx1K!}^gW7C!&Pq94>zd)3_R;P&%))V>}PO2$93WPe*j_FBljF!rkHQ&!(FSkB4Q~7{oaF}Z!J|fK4DK;<@57A?5#s#)6(Q3i`Wu|;W=B3m zv1m{Yoats~!BZC0*>JOlo&&FNvs!qWp*|O$^aPy;H`p`IhsTn?|E)uqQt5)AWH-DJ z?$zp_z|-o~2iAy-;290Q7#`P%1l;Im4RD|9Tmq-*Wa3hU7CpEO&N32>@SKHnIXvN_ zSHKNc`;~C5=esGe?e;2oR)emF>(sdhUT%>#!;KHv|F1=u(VOew3PX22+^^LwaHZon zz%BNJ8{ujfy$O!%S!>X-NN3*8Gh7{>eH6&ig% zJgR;-oMtb10M60q2jLDkeh6N!13hqJg_9pfNH=tkzy)@zN8t*OTrb>cVLk>=>G9+6 zwEP4-=9+zQlioiGXFnDl*QemhXidKV6Cul^)emQA#53@W)&4A8t<^t+b6jWuZa1&b z!SfdE&*53?>3KMAR5trBVK<_i!%Yt)B8#>_n02%4aKU4 zHr%K|>%eoa`E|I#6sN&W>LivR%&YVbxLGgPguE!{(7v(}oPCr1KLerDuzwS7^%Q&yZgHWF;UViI6P{VfAAejI?lQdJ4s0=Q z8rU_n;6WenHiHX|?&c}ff1_d9f(y-tB^#cw!ncH54f|Gb?Aj>QTf=GQI|nXu(QV*v zjo22Rbe-+s8INTy+#I5n;FN5SkYfIJfQwydM|jo=dGMUP6WpSqJHsg&ve#E{5`nFn%E1@ zvT+r`dDhV0K|hK*-~WTq?BspnbS*80Q{7-cc*y+i56^r24uIQDO$prMItRkNt&x`p z1sx-CFq~?nOW};<_x~S)kauM?;ZQhVOAmuPoZJhiIr*``M(%Mq!)QGLx0`}Kc+O}& z31{lqQ$fc9e>#EC5(Obp|$on_L1TVY=&s*)kfMb4KdKB)`xVPa>Bk@bP+q3?w!1jYNxX(IxA8zqZ z_yJtJP}H2i4-tBtJPyar@kemGC*tFvh9@WbUI9>fu;aE%L%&*~gL;V|g${sKY zck94!;f{n#ze5k(RxK(dHhqI01G~8@M`vT5!{Eu+V&zSxR zE;QYV8H5tg_m^;&A^kI)>*T+{?QS*;7iz>`;SR_D1{XR0cR0_vbMUAR{3GZa(SO3z z_uK#fh0tX|)vUQ%tj?l43yyot&W1ZZis!(+rlS^a(c^RBR(rsCL0{v}hjV;ZsDpDY z%nR0}{<~DVFkDcnK1|lqi{N$_y%^3jH3_&+BO2gz4ZQ^J@O)nicgmN+^*YuFuLw01 z`v2t!#fI(*xZ4z533s@06WnR7Tm=`IzpLS1i?)|qSJR-s}jc9{=9dC#8&G%2?0{K?BM}uyIyWOh;?u(30#BL9Q z3*8YW=>45=iWS=l_v__daN0wWH}}9REUqqiRxj^`Q|uY{!E=t^5BIu$H{5wcB3kGH zgnaY*AY7vN55YaxMLIq3ybC=HcU!QJ1pO-`ok!tP=k~(=I`$acWh$Qt5BD0DO;S>X+7tZC#f39Lbv!kMhO(El$( z=(5@y;e0o~9PZZYE8q+({7QJtus6Y7R`^x$pblIO_vqL)aK9&|8SZwkYtyLz39Y`4 z3w`G1`Y_pzTi_Ji>J4GsBDxVSc`OR!O>m!4X@wiD@SEWRow)@rl-uC;h10?LYe(pH zv!B9)hU-?i)D3Qfi=5m659#IY@T3mh0ry%fcfw5?(FvECrn}%N_3wrU5{Bg-gkcx$ zf>W*hd*MvOejnVgm-oYi=CT`}cF_mmAsu)S?lv_K!37q058S7riH8xIwe%4<-@3PE zJghgvLC5-d4K92nGVXP_%rw0L4;s-CILCF~gk#;2{#)>fhW;Xr`X4duqg*J^`?ui% zH~S^rV;Fx0_sT2aaZkZJaNMT!E&D?! zCw~MF>Dk9{mi^!pxKD#7;2G=SQ+QAZehv57tbPNhdYUHTM2S`XTZFhp_d9sjg?1N=+j6CxkrnGy_k$(3kL-3;h`$ z(woi?Yk$M11?STCP|=S)E#JfH_p z!l~Zbo`Tclr{PYISwGybq0hjTZuTr(CI1XAz|e*MKY&oE)z86MdjE5HM1!7(2Q^|4 z9&m#f;0#mnB3$ILdMiv(xHx&%;an%b z0goilIy@@B370wdEjUx-egTiSMyVWyCl;9V_clVB$LyEzs2=|c9@NVfVch(^1IG>f zyYMor`aQTrL&xA=Z&dHYrH+39uh7sB;emwxd^`vqvyb2*L;W!v*SJsMY9mziV>ULV zd&BAK>=Rhy_JvC<(qedp4(tb~*#i>$Ba|Di1K@d!t^^*qE(+IyaNG$8!NVGNFg)#X zErlly?;&u%X+0D!)BD5VAtPD_4<Fr-HYC8JUf54h-2aG|aGXgJFp ze;=+eD$C#*jXMS&G}1qSD_#HCABX<0Hx*nM*NEfbAt(G0PS^V%!CfA+O1Rwn`tgDF z@&vfXG@S^K8TKkTTSHHRyTdx6|DTLdq&KI)Q-*OloMA3cg;!XZr@@tac{*I=(X9^p z*1;KYrgMJ`7rXwMaFyQIz=>%$I}2f%b#OM^XZ4-~FLy#MoaqMV!h@#cJUGu|c|M#k z*TJP0;017oQM?cyifStn`w2q7o7KYwPQD1P(#wm(1nVFHFEi{h{tRlX-E%cKOXF6D z2V8RvxI+CDxY%f|3D0&Wq6%LNq1}bP1`oSgD!k0Rt_}B?`*q+F7y3FpVcn#`73wd6 z3w7ojaF*#<7w&Mccmko)2}|K>L%m)Y*Xs4*GQ*e-mzc{9;Nd8Yu?^uFQ@Ig5WNI?t z9E*dyPjt1qx6&B_;@TkXiTR7&|Dr^U5X=pB-EpHEx zd1`imYc*&`xNN}z&R-tFr1{$k9@NsE;cRoZ3p{63^5Hrc+7-@mv)$lI4gC(Bs{;k_ zu)XBFflbZsa9#56zw8kvn43a4$Bp-dM~%?;;8JtH7resf#3H!L8rmD4(wTkW5jWl! zF0vT+K62j!56n98_;XImI=QWEtEK51y!%LA>|{Do_#W*o`R{_7E~|g5?%_PXDkv}ZDF5E!-`piT#{R^A z_kN^ppKX?2yqIxxu>3R{5fq)JK~48{ou)U z*Fhn+?jAeEPJ8=#o&PivVv*TAM{2_N~+L}#hRJZ**cj;bB zQ@*!TY-f}ghWPI~ZL4j+bfdPa?U!aPDdXCX$!l#lY`=7mrR|G{xU^;4W;>uhyZzG4 zB@$b>MU&fZ*k$RlOWGMaG&!g3A7LoA-{PU;^Ot^q>2ih+OltAprEUM-W$D3f z>ASM%2-jA6*|yWJOHW)Vf6qmt@vckR0L&P1nebRUK@{g~vwaQunrCQ=N~Umo#( zaGw2se|XfJ$N_Nd=18Xm%=S&p!Ll6rAh_1U%8E$?xTIdyc+VNN68F?5kHyy9R`5O8U*IXDI|~TY?JY20e|Awnv=RZNmdipOstz+RA%xR9V24_Bj(d-{v9U;rsy9PYw zPd@xcE>>mX@cV>VwmNIU%iZj2aFL#+!WDY9He9XFI&g{+`Z_$RW4xjlOH?{x2|}8l zeFL7+>UH5_H;BW{R`pVN)^@udTw!X~hYO8jI^1L(YycNIz9HNa{g9G~ZG@0!li}5s zSfly-Cfw}gZ^5&k>5btQ$1~wMPsb*3-0*%IZgQPX;c4q23!afTgIn&l|8I`a>W@uZ z1a^aLc-8{k5{_%=R&cW$Yz?=op99Zp&^B<3(b^WCbDiyizI)|{{##=aZ4cMVJHW+; zYe#rit9OQ5J;%GiCF zvy1Kt&uPT>g1$wx7aZ%1j$aYnqW<1tyg3@*2k!Ss?+eeF%3@yph)uikeq3lZT>HZv zhUfrz)?zGyQ{3zzxXR)^7@l|0Qh3HS4}m*OO?dooF=gRLgXskaIDcgb>E`utc--T6 z1l;O`BjI+#UJmCP-lO2`aE@{IX#TH5o$tfx7UMFw#-n%)JYXb#0B0mrIu@Z*k1ODq zZ@oAUj$aXN@I$!QcKaiE-gH#L%k2}#!zqUS1h~$6IuV{TidBKHi`Gn>gwSb-PKIa9 z>nU)%-Yl*JxKr<|;c9ixfV(WZ9|wI?b0%EV;+qd@5bCw`EV#~g zdp2Ba=*|h_axFaP#^=J7HlOq0dUei+^Gs76+-Kx2faf&g!q9)y4ew95Q07sohdcEC zA~<$`6t0Wm3~MDEo$^nA}e-)f*-CP}5gRX)5^|CqW+w-r3tBla~@Pq~40w>x%ayKA!>hX>6q)Ioz zG2iRe3OAUho8c}C_7-?pqubzl!`lwmo64WUDXw!XoE15ch;<-zXvFPs?D{Cwcfk4P z?@lcP(K29Tj7twvEImmUbxz0`4~K6gdT^xJSk5s6p=;O$Azq`qRCIf85ZVK zaGJS%8t!&-Kip_|p9ySg2H+;gp9|v_ z{%XX-aON8kzXrFe|2kapdNlq9Jg@!;JgLr`aH^-^EjZ0y@{7>_yKFwATo^S(Z^PYM z`b)S;4}JwV>)8sp$4I;rboBmRIPM1T1%1cI;4TaNeK>O=x}3ic5SE#O58*-cIu6fR zP#?k7*2l+is+If+-0h+haGG9z3imkvYq&+De*>5JG&Kp=BrK5MBIH_Vzk{=_gWtnh z*1;6qU{!w>bR7Q!JgcFf!xcI+4R;&eFW^*9&>!I*3pVj5gkFU&;aPM4XE??D{RJL! zd=^gA`@h2Rhogf18{Fe&e~0HZXbx`G`+vZBI{D9_-4(aZn9 z1@?pghH)blDz)7WR)cdLUmc#;h&A9s=cd3Z_eVyrxjOmJb3%A|t;J&b8XPy5sc^5k zTpP~UgYfcPx;kHnV-H4)rUf0>TmomP^9{Jv+^-AwhG>QUA4h0)a^qcEgR}TE{cs6xR%|8P+-eEjZEVgpCn83}YtTDQ^O&*wMZX zS6W<~!tENJ1()gB=5VGSZvkg$Xg1vJG2RmHiz1qcZG}*;Md1a>0>hgFH(Kr6gmFW< zEu3pjYzJq#S$J`?$Q*AEryIE);8eZe5$>?g^5FjDn~!%w=&|AK4A*)r!z-TY4@c<; zuXd)}SoVO^T(l5QwV?Kd%Z)^MH8oq~_JYSO>LR#F$Mz2Wx6fm<51eVZ_J#W$FNQPR zIJ_hqcjNuxUOV6c@Q{tG1nx3@2f}Hd`-9*d4LTUkAVT5(6DvhXchN)OI=w#>9(K{g z!UT27-~ms>;c&Cw903=arX%5gYpWbCa{Oqx${PCq>h%9KLw5`pdQHKx@N$(Z;0#kx z2@ksQ@o=ZPJQ2<^awow<>YNOxTD;5QYS%m!9$1Jj=kGLxJPYb{I8!gH;atOYCY-O% zS@58#IU8=#`|x6QrfIqe&T^dwxZa3f3Kv_Xm%(WXt-BH-<-w@Xn&3Y3dKKK^F}oVh z*2`<)5*KQQTRd7f!Zmt%JDh3c?tq6hdcQTeFYrn*|KZCg`2Plv-&t_2lh1~`4DUH` zjvJo`7n{rT;ZBYF3EZHU^>DuqTm*NilYm<_^a^<7O8b8kLZe1p1*aN`tKkwiYlaI< z!F6z? zTt9^eg|2x!+;>xy);r)V({U$U6buUezY`(-^~i|3;CXMg_rUe9 zMdMv?nFiepw_0@f!D+*h&i(MPIqrs+*@zy1i`97$?lv6{!HE$k^dR);!Nc&l-Rcpz z+>IZF8_n@!@PIjf9PZN4C*TR^_Q8YdJPB7Am8amQXdOO$h)^6tK_vR&5ySfoJSIO2 zx4s&A`7=0fM;m|}-S|0pnTGxxF12o+hkLAvL3mvK7vR>{dH&~Q#9j;+%;igAf=WYh zw&(a|IM06Y3Y=-mUWI#&+;CtwdkxNZo!8+a3-%2-ZqpkHN21>Xc@s|e!dq~L{0lhW zjYoryxqKU*G(zvdJv#6%T&m7{aGzau4DOfThjVajq5pq?Q0KY-5RTiF#^GGg{YP-7 z27L@?$)CWZ*3bl;?f9o~g$4L)INg-}Cg}LX>*N~r|9Ut6Ef*T(-@!u`&hOzSd&3l5 zY#2X-E6n#F;B1f9=WwOt({Qr|`vsh*Gk=8p7ShD|`x8Qm1vmq*FlS%FT~_R$;YN-7 z3tX!HEIeZh{t7oc_wVouqcR8QXxu;GN~7{mxIN)H{ue^Oh4XKCz?%3E+@a2Y;UQ*Wi3ZlnM_zd2P7ezP%1S zprKz6I=0?4xW~q_1fJ5MZ@?|4U|l%f+KR&&*W3S>B4k=1>%rBpM#pk}c+g0s!&M%+ z4d7;LVnevZn%D^L(9jHcNC&wt1=iDd;SQbL9d3>aIT70fq15~p!tHvwCtP6H`~Qf0AGo~d{r~^H zX=Fm%iV!j(WNYo(WI`r{5JHI4XcI!V93i_x2yJT=cs%J z+`7#7(80zkGarsT+&|$Q0w-$=&xE@)`a|KARl5Ik7)q`hJsj@Q$g-@0Jah!yEjJzs z7b_T#f(y0bWWz;TmPf-KS}DiCIoJD!9&4=qBPWQGE*BjKH*5Zmhubu=6ReCpkqZxM zI!=TG8rey3uVUq7xJU-&!QBeLQ{V+NE_v5q6Q8HyjIh>*Sz5*_h)l1=Yb!Kr> zs`Lstdad8Vm2i`cy8+HrJ2%2vYQGvzl2?MuP&yT*%i%Gt-4$?y=Dr4QR--H7EH%0c zj#0-q!ExeRxJjGX&2X#c`xdxH7qAfA=g$9iC|xq*R(M=S+y?h*?r(?l6d(0)wv4y~ z&R6=Ka6D0MXUV(ZWR0=`&QbZh;RKbr$M*kRW!y_fw~T0n+qL}egA-L@HJqYtbq$;? zmo~u#GU9$XPi?M+y>-4p55PTYzZvegx6r?bG-oP%cU>EeM)}` z4rn^M;9`ybWjI;wyaIQ~L$6x84C;pSuGjwm8cK>Pybia>?Qg(kT4p_PtJd_Ja6q1T z3ocQ|Z(F+B>4nq8@4zYQ_+7Y3E9*U5$0^#a`rr)B>-%tlHi{46crC3D;XzGVKRkSc zA6y^70ZqZjaGJdG3EU>52jDtQ*{5&k@-h5TGZ&b@PI83R>z;LvI29&D$DKP z!Tk!T@8N*l`)5m6e2l^)^3Y%4LV5JBa9Mc3tiQjZv}&o0!37GmAK(&qR)_25y1&D1 zDnAaF%X9yL+m-$k+%KblhFcX+-XxZ&jFe6yCUBQlL?kB??;w|7bc`F!&k}j8S31?`Iw}K1hiLK#bbr1~~XkMql z6*6ur+$Q6u8EeEb@Q?->3lEF8fs@wi{J$+qrbZtJ_bXVogG)69+r#OydIxw^^BNDg ztK%Kv0oC0Ju9R^*TNxRY05@nVcbUZeSER8t*8;3>Z zLsN4g+^Il22+onA8F1!;Sb=Zdr8Ecf#9qfyeeD;)!8h>wN4G@2Ys*Gf4KPLa2chr3ng z1UOeC&V{pN=!x)%R?tashk|iI5T#pIp9#0hy=TESnx{h8yU};uLU>dSErR>yt+U}; zl`n#O)aE&Gg*K>j;YqvXlz^WkFcP#3@v>i9yqP92oM<(jgK;4C$| z7|s?ifk!n3rIs#FTny(co_;@x{l7rUC1hl24=96saa=2fs#{Otx zKzs$t8+^gwZZ>(T!voczKPr!xOYyW=|Wmuzs3eJ{w?QncPwssa9@A2M3$B(| z-iC*@-S)yG;&>&{~k)VT-^tk%F_4Y0U7iGT&DC7;a<7DA0AZXe*_ol z()=+T&<6DhoG+sX;C>D4Q#d%T5qyS{Be#EU6*QNF@PI0O0S~FOKfr0~;7fQ|7oH(_ zMEn(;t}FW z;40O994^#|*TW;4*0yQv|KoD|6PBSp;7Pbzm7jup<)L=itMv_i8XnUH<{5ZM9@+qp zs)G(IBYqZc&{q8%JRVMG{XLJ;t!=dv_Vnl1FTina_Gc@jQI5jJ^3Y%4 zI+Y)TdsY4iINkwq zL3%S>Chy(?N6CvJxZF<!JT<^&ijTYDQN_VM@YwCT|8uWZ&_$vVF3@_t53bM%R>RF&a%Qo;qlO2Nbc7z|~p>>);}F@F*ND z_qM{7GWs!iRPppU?5+0OUk~SUQVQ??Z74Nr^a;2`u71*3k^D5=uc>(k&ew=Hzy;z< zcVwDm&=qi{t`W=OXbsZaiC~n6ChWxiA0f9)Bx6MLy@?glXd>VUSv?7^m7$x$b>hw7 zA$cwmu2=fzaEqpFG90Hiw}2bMWmtbvD1{oqmT-|Gd@HzAp4b|0RHM;WM&+l#UX}0C zsqmOwJ?8ra;OnE!@reOK&j6*S5;cuelv&nj!fnFo((Wc$N0>-@Uu zaIvQ2060%yLJou@72pRMYhW30l%?DLe=y3pI-3ty%0-93gX%aFj@IZ8h0EoY!{9Pa z+2K}Rqs)R!<%uKUXnE*JV;OW59E{hJ$VQ3NXpV-PJzo+`BXScm)g_d1PvhH zSo3{4T%uKT20W}be+O4;Fa>b;3+(^)`=13U?JxU$CY-27&w^uQL?Jx9%pd(iI8Nz{ z;3_TGv*8*YT#MjprJn9+GHBwN{#+*xK{Ih4?L#1 zycaIg3TlMo<;DBpVx_N!Yt-=?xKW#4un8qu?z$h2)O@dn^H=zmJ^01X!xqp20QIv6wrWH<9#6AW$tAoek3RPYY*K1ze z;3|3O2{=)1e-f@%`ctrXzi&i4Tq@(9w*7xhu6~A$8dcZ;7ijbyaD*y93%6@7pM&c( z9nZs2iknV2MILq;c2p6i&m*9BwmhJytC<$`W%W$oXcm=MLt6zm4oDI;qSoZ8o|5ph|0VN*K72B zaH0nAJ{%`QKY;7BxqS$?YIXF(^?rKL`v|2$g+7K86hxm`A&q_juG1(#g-bM=&){+m z;B&Y_h7Q8@D*pwXq1UJ*bC~fmUpp2HGbeshoiMdcZI7ouZeKAqIWkqLUnhC z+qAUyurey21UJd(J>e8h@m_Gd1{vHNrCCv(Y!x(uec)*AXfxnQbv6@DR(zzuF*0-( zoba$efK<5ZdY@;*fyaCfz%A-)4jkoPJ~$VpLl*4|H)~$g;C78{KR83Kn+HcL0QZMG zR3;s+(dZ9=)70^SaJu5-AS)v;X6zg!+7)yMlhG>c=EE7Pa0pzhMl<0|r5_4M$tziK zx;i@o?$9;jNVr;_I0|l4``K`<84)A~jz)>mXpV!EWzY$5h8jH)uF}c%WH?1ra0*-} z<4%J+)$!?Yrt1Cv?deKV?C$7^Pc{o)33vE-$bO>i9yqUdyZmj#pz28ekJU!^jE=EaH~9Vbr7XZ7FELS3Xp5yXa(1`aDzsF9bBV;s)9RI{(87w z?c8AHW%P}3j5e`qI9mf-23KKRc>iCHlA@qnVHMPI4V>(Rah0^42|YM0h%a+`vYO(})}4q}BdB-3KR&SHmeXZVfyjBbwkwx%z&% zOC79*j^Z!FAts3RSaQO<~h!!|WBYOnS(fmCMSEx)IT&=y~ z3Ak4A@gy9tfjwocscDCsv_yl?pd{;t@bhq+jOcwThMZ;pUrX20c4|eSlK0LLb5bH97z%YA!#8GZc(pz>QiFLvXj; z{uLZ0qrZmJHTU1Z4QhWFPLNmrZ2NzP0&t9sPL1*hI9~JjBiwbZKOKLElQkXVaF06P zeHRAM<$rzK3r>8+=e;dmoC>F??lEw{ILPP=P`cFd0xP6#_)NH09h_yXC07V{tNcQ^ zQgN^d?o;`*;Vf-RMR1b5cn+K)ubc}9qvfviP};TRis3ZP@%eC*TzvtYtcEUxGu2QD zT&JMB2yRidFNUjR+!8oTLJ8FUGpsrfF0)3j_ZwRBC{WpIx? zaXH*8E{9uW^cBVm#-(tYrXUFCKBoQuYLq-JtxCAP+Mn;o6LG2Bz8>xux4|9q))R1+ z40;mI7C!~2tFv}EQ9<{#rOUg|1W_`iY_JTCvcu9<`B^xin0OA(m!Z$Y-3rW3xKjqb z0Jm!NFT#zA{FmT3dAAGhqI`J&e;K7(^YjXwBuig~vlT?$aJ(wN24~37*WnzE_zk#O z8%qzItajdnTQvo5!EG|`?L_wfG>xp6j7)jr9e6;leiu$q$M3-@3cx-%OY!kOJfs-< z08Z3K^dX!nFZRRf>gyx8F1!)3{ys+Omg_!&vlXQSaFbm3DO`WO9}}O!N$TKpI9H<| zgokCs7jTM3{|7iAqrZd`HJBl|C#d=R3MEIbwpUta%Dofd8tv^9;XHM=30$l62slF{ zn*`Tui`^7%)&Mqx2j$U7IA84q?RA+on)}IcrW)D;ZquAa!3CsWJD6&VAEv#|DGuQ+PC+DvlOv=!+q)?8P3*GdLKAf4b6ZPbfKCF zH>l$jI9;BY1?Q-4Dx9J8*>JF3t`4BIYLs(ePmfRM!i@^3ec>Ffjx;z^4ebXvX`1H2 z&EoyxB6%wvZdW`V0O$Jc1ib@Ik?RhEle9cC;0PIUFx;X>=fm0Z&>?WHMwSWZ$+$z| z4#me|aK8fZa5zVGv*3Xi?f*xh6vh@+<2Ci*Yp*_{R-HH zaE>}&1h>f0v*BzRSCq{DKcvy0Lq?a}axUB_*PRC!%7|jCtSLAj&X=JV7|TN!!fguV z5;#$-V=>&Q)v*LF3b)DnyBH;18^Z7599g#%ZdK6PG_`636>x_l`AWD;UbzY$)|6ch z=W6toaH-VQSKI#It@&F+Mw&*`1P`mT`{6Fl*;+WDi_HUYyQZlb?or1NT6qoTA$UYy zc^FPp-4?jOyl(sdBPiK&%Q`qlmOcs(YQ46?L*mEaQF-NYctnP-huanTZE(6edjjs) zYI+hb)O0@u2UFy_c9dat@HCvORqzblrd6;39#BIaaECg37A{brJqM4tS$H|MY!=svl zH{c=}+5>mG-+#V|GNRGH1?S74x8ZKheJ@<7rTC7qjCdC=Qu=#vrdCiNT%dN|hsQK! zAHca9*oU^UjH=^)I7^j3f?ITU`xwqsg-_sod13$_)O36b7s|b#!Cjh~&*5yf`3>By zz#N9t3HI>*|3{PpT|B;pi#3|>;d*Tve}=o&sJ(f=M_!o#w`qM(gxeJ>o4`5hI0DWU zPl7YF$~N7H{eMhzvl$s3svHRyDM~ko3uWA7xLEVIg|W&+S$UP&5-wL9Yz61bb6dkD zsvB(_9wh5;3QDIso@yCtbQ)YBSI5A`>L3;#lH0d|d$sPjh1=zcIJi_^+z#$i``g1~ z*ZLdX4sdr+8SyB?YIH}qK&xOUI8*N08Sc>(B*0^en_aBDMmZfGQ9HZB8QKF9;XF;j zZt%E*F}Mdxs{(BwxI-hzSdH5?`h(#Tjeb5{r1V4JQl)2Fc^Q4EmAT&^(giNK5W$xIuw=jFr*69t-y>FmvECr5^{6 z$}7ji3F_;F)wch(`j+OBQK7&&5$@E+auS@V3Ma$8nu0vISfe?`SR+0aE>#Sj1~O?n1ap9WR0- zG|02zas_4)94wL5=b(%$pw5Lo{U-Q4xKA!EhKnEbJ3AllS9%3JuBg5eZc{v61^3D5 zt6}dtziuU5;(IRWU4t^9hOUJN#n-`U3Y;o9LY1$F3pL6c;3Dyj###l{aItt99I4SS zhcmSzR=|~^pl?wPN}1+tC7iB~SHTr>*G+JQTwMz{%e^I`3`iXFs zMt>6Q>8~P!C!gbhu2OI|J@h-24uXQJDg` zRQt^WxF)3i|4fuJ&C^+M=L&zsg>bn>xey-IXcob>GWu+|Pu?nmqZEMWz$MxP&V>gQ zTj#-p;^H;Te~#RBJ{kS8`U1F4^Lim1qbax)F4Ht!2A7L3hjUi?Mwi2#ijOPcAsM|C zF4j^H!ZEfiZU3)88BoVp!WA0vRdBtGxEk))R$2*Hs?0TTw&wL(D*U57lyO~DR>F-cvBC~aCc^>9VA@5Vde2u10gaFrteE;v_H)&R$8ce@*IPzU$GjpBRZK^fEt z4{JK^gR9pC{mxdSw9AM!aF^z<3C@%2?uSdYcGtrBN`C+@*XWz!xJUdpAA}23<{>zs z71RPpD@Y%)K#0^R*TLQD_)&O7mbSv>n#;%FCXMWIE3c)v9xha8ZE%IkKLL-bohRX3 zP1#d$Im_s8{jGhT?bq(eim+4OgsmdtM2o#ca!glPPjsQ z!wYb{JoKXN|CO5Wm&h1WXI*fW(qD!n)X*z%p60#>j%)QhcoVKr$M3=k>fk-NM;_{f zo8`Ip;mWXwSbu*(iB}N)6^>MACpA8{jgPxe+c> zkXFN$_iO)OhBBhjEQj;ux)pGntge9zl)e(K(SEQBE>@#A!O9)i=fTRjZtYst01l?u#9;31889Xu?46z)@-t#Fk_{}`P3h`(GPhYS2R zdH*L$f|gbr948~5fJYSVPr}8r`YAX`4Yk8{n%Ae{aRux%@TlTx0~{@{?D8{imq(|= zRrd#di*`jBRcDEop=Glh+^^B>4j0N3d%%_2(URbJ8NDZ*EVu7vEJOE(2h>h7JSg5L zh!P{~X28{2S~KA|rKiC0;#qKsJdq05DPU*ARhpUrJfsuO9JpHPbKyS4&AxCAeTDb` zG?a1$;C^t0Tr>|ZRc8moW#aj8zZyCOZcuP#!ed(Zhr-@NzIP9U>orY>!-<;ite@Hc zBUI=JGCH*6j)YU>x})G~O-D97qCh(uPLSJ=fydSHv2Z|jbKoJl`Z%~sQ+7N&98M2< z-U%q>8d)w}FPEMO7iqpvf~y|(M{_bfrr^qhD^&LsI8uW-)ygQIyod>2gGN6A9#{HA zc-X!FVH1>5jVuCA(+DQP)mlQE!Zq^5W^j_+7zukf_{MDxSIVHt@R-`%0$N5NGp z6WkJIT!prRt2N54;Tmx?oUG2Kz?IsFrozSY&@{M8=`nD%TperW6;Ip1>DpJeg%fYm z{vU_ZAh&M^*J>4P57(%n9pFyIM?5?doZh8o=yZjupu!GmgNZ+Jw@G8wKm zZv|N;`=CT<{${|LYG@`rstPIan0OXkBSTZ+2pKdRu9dd}#+tr4aI_4a3wsav1K1Z1 zMyhg}RZye*!7)0a&Vw^FXZypWa(g-)p@t5Ct2D<4!X=7{gWv>hTp4hRV(4Hi?|Ys1 z|DaT>@*!}HEX{-?)xn`~r{?c4cwEcxaJWuWlLgnPog?6uT7Q&BS{ZrbC^%A{&W7XM z`~QzdNx9Cia10!frN_ecs@wucsq!Pn^4vN&PTqPHuG18>!ejE*V{p6%_PCW%fUggt z)L0-82W`e$>rcS7N`DfrSEElEYsBsFxH@Y%NO7Tjq*h+BZFRoyR3%EY0 zLVrN%QiOjAC(9EMsi%rdxEURe&0tnmYL1zaH`YT#g_ zT)GmaPf@)J&Qu4raI==v&2XcP2*E8%uY&`c?_1$C@ojLk47wd|QeX9Ot8aAByTcSU zbf;C&=_Hs!`qtM`+Jj4UZ{(4cwyko8X3(LBFB< zQ39IRwQ!b3{{Y;)+%MA%kE@{v;U)#_LstGezs$pMw(7RPZ5r4kaHFR3QA@A&%ePt( zHOZxq!R^X;98OU%u7~5a$+W>Oa_JLrwwCTwaKEOn9Zpe%S47dKJa?tB47v)Ar_J#G ze>F;@qP-FhsN-wkCRu$g9H$7s4(^lNtKddO`1Npy25?u1(uD|f+FGNJ*_(KOu+52^e;aC=a0 zxfi8NjW)uOiv0WFc)5Kw+@?{kfjcypP4KW9y&vw>0M^1ynwkgTGzEAw+$uwZ5294d z(ud%H0_R~kr`30F3*6}<8BUNv>)>Y1We41)GS9-fs{0&VuZ`$=xJBhV;VAd-|Gt3I zCW~H#6V<^>aF<5YWn~l}FT?2%`Nq8h=V+Q|;1V`@tu0s|*@|M-&I2!W|mGXK=GNtIy#`t)@XZn5C%x z0wr2O_Xl`X4Sfl>se>UnLnHVK?vdxdh6gp`Z{S{~55rwD`j2p~rs-Qa*`J!A_a~GT z&C>`xq=vqO`_$0)aHmGo5XXoWM0dk6GWs4kQC_(hj*~|l;Wm}O56)}#<6t$MeN)g^ z)}Z9b6HRcuD&G&c+~}8C3%80NfHU24vNCe-gK$8DdC1CZUwIhrRv@>)`7+{>AWDsv z-#WNUqkI$|(-gGA?Ha*jaHOtmkHb;o^>BlhSsUCYL!W>P)Y+48q4+5{4MW5Ge>+OL ztbQ6!(CD9myJgS@xI;#C!0qbbSvXEp@En|>W%)dusCGKxTzU5eI7!p=VjS_`D%ZV4 zMv<)Rg0po=eHqSlYaLEjb?%g%eXh-{#t)3d*FdEv;N*hiPAEA z3+~Z~--bIh%3e#?{JjH5%kA&Nd5Y@y;4B&12e;@#^*)@f^bg=(8TujI9@Ku`Z;F=L zM{uWH{V^OZ<353l<)MrV=vXd27>-ey`NlHt5I9RgnhE!60Efa++5>`zq2$V4hr{Cv zx-7VTx$mwc;AmAi67G_5N5R8duG#RQ+zt@^RGISx_WbN4gzX&Bmqd6NM zk{gTQIL+lbaIXUMT)04^JP*#$(k-^~ii7jvc-6fC&Q$vs!i5@r2^<_&XBVO5DGnCH zt%}|yaFHsM!tv_hVz@)o@q0K$%kmO9ATEQm6@Zt*aq{A2aHk(zLGN;uHg#4Gr>XK4 zaG^%I)G8mKE#LvgO%$B3@>{~`8q8L3f~I3@xL$ol2T=-CVG3Lt+{wi7(2<+L-Lth7)9HGMp&h2kz6VnE{u|pqX$^cmS-w6qG^D-z>O8 zmZrjqnzPyPn7k5z%hb>uI7yw&g$rcpzHqVzkOp^YFWJvnQ!@`PbN~L!{#HSAlMW}T z;{)IxdFVhmTXTO9+^ch923)8ZIv5_(VCKW!>i7^iL&3OU$&!VOOV7FRf`mm2LMcyA ziJw$;z%2fR<+!J(?CazDWlvApV#1!?PtWvtp{;l38?(I0$YNv+vO@X|$j#7uL(e`l zW#-)4*JpVt4Ei=?1T)iLHPfqy@8r|K=N>+#ugvrsku7|ZUz+Kydp)%KhABU8(%&;H zbkyz9+eMyRdiKTVoVj30Xi9zbaiLQm+j?^7j*cmZ24}rF%R868_TzP3n_P^5CZj^uTM)_q7Xv(k3zaHs%v7UF>FAaW7Lej4aeD4?dCI2&Y z-kb7^{snr#>Fe)*cFNQV|1!waw`_TPmUkW{F6EOL`ZP6q=AkZWHA#E%`L%xNuk^L> z&cD*PWKHmwgns$Z-Oo=sd5)|45y@M+EaZHOZu=|!z<;T_Pv?|<7rLtXWSNhhUi|B# zq}xAE%qt#$$+v%q_}9AqQ@)4)D&PJY-UFN-dbxATd6VMbo#jmn&AKFdZs?Okqqj^= zL(ibd{t=$H71HTh=)7_A7ySry>niQt&_gdwnYXJex198hUzM|e59b(P4;_10^nTM^ zLHh?6_@6Zxy8W=|118eaEiX=a`CsPfxKR3?(UGyaeY3npl(m1F#%3j~uYdEUDbW-5 zdViM3sJuNA_V9*a{;58%9%=v0JdyRbWah6U`{>X~FHZ>^9W`TyM|gO&=e5tA;f+(H z5RT(x4w}xV`GZ;Ervv#ZJRyLs7gsJ7-ofdi_g|ip7GW)fVqclk9QEO>a2vBH<3V|L zS@c$$AG&z)g^T&oz=xsjU!Ah+KK=Ne7J4Xc|1GrKc?n)N>9(|~{7YVbf9Tv-r%c~B z^W~Xgt4kf zJySlO<;^4iRz7A>)W@MyUz@V`UL>2J6OtB|6)m`UN$JAEJ*!EJBJIER`H!znITAxR z`DB(ipE3=UJu7tF>r>JajYw(5Y<>gp=O7)gjK4Q- z@#!pYcZ&SC9p2V6WinpOq|Bnw{XJ9mp5){Ezu@}K-<{q!ivBXvE*l>qZEO7& zX)!n9r&+eOdfOl^;%6XjK4&4#khzk+&Xsz96>tq6DBU%9uyog8Cc15Lry(uYN|E6a zN-jm(fUZZH;Wr~~Aon0`(`iAPLE-v#Qh$^LbJ=4^vwS*JVY+MJ6{UZIw2uEOeT$!c zeLB+W?JNBlq#1TL(ss40m0zd)hoyHSgVx}OfOY6B{0QA#`yJ9;y@{6^?s$8obu<%c zbC`y-<$Ms*MwpGX5$8!?DE%VoOQqj{G*8rdsljl?`&3|^3OpnIRq5|ZACx{K{U6dd zpWrvREz%50l$?b$gAR~>r1X=J7TgOb1pNw&Nw6TgS{bWU@J^&feG`&Py7v&$uKQg` z^N^deA`ZQ_YTOj{ahx>WO;JDPEk@jwe2Q){ux}6-+Y}5c!OhW^(ru0`zmHRyHCU{U zz9!!c_z7uKGHs$ifJCHC*<7T>z_Cb+f%A~o;RQ$=P?==VC0s><#el0&sS4L2ZLVu1 zoqnszI|FW)?hLp?diDl?N4pE%=G^HIqT`XEw+^s%`+}d~y@Is4>F0!PBYq#CHKCh3nO&4A~THh{OJeWBCXyNNGtyW(#pSuGy`4zK6HzESNNf>{z8UzwD~08!YHH# zU3{1C5vRv0-<6L;w+?rbOjQ0JNZW!_krwSvPv-lN#ZKi>F!!FBHdjp{x02JD>mKCZ_mG0u>Pi!U>3QH#g5Y5#UcsaT)c3C zFXy0}tKGFC6WxN$T`P`3HxK0~eRo~XPer%bIS*;U9nQD)UrK_x_!6WA$8w~((CPQ0 z+Z;9_t>Pn+PEXbr>pE!UMu^4GAm5ZtK1q2qC`HlVj&A*JKn86+_i|s#3c3QXse^Zs zHnIVv8Sn+t3>=p}A=39mG}1ie^c~Ty{B-5dQohpguXpdM)*Hz94x>mynJmhh-DHXv;z-AJq8 z^w-hNz~m0!pk!^;ZW;EHZ!UcgIUV_f%KwZsLt41QXC98(+>e1Gow9cel3*j7jkFH- zLt1cUAA%Wy$)B2W(`W6tFpb z327F8fV6a%AFtrsoATDtfXX}lb9C$Q3#0|t2+|C89j2@PKS;OwTWvvqw*Fm*Q%JB3 zr%y+>>vS5@uIo9{7fD|#y;gcN(gxtlKa6g%;|zKN-KO9fq#5`!GH4ZCgWW3NEPNB) z@?8hL=r+Q4k!EPIqWDX6yZZedX`XX>y6*J3@>@mu^`ntif0roMzge`q681$}l-kZ@ zb94y0HSD(5daZX?{$%p4em>HIccG-y$F(!M4lf|z2IShiD2nxOmRv=K1x+o|Mz98H z9Y2M%5j*{9>8|_+=>^1ux%ydjlg`DjqMKnZzZczN%H<~qxy@@E!v|#8$p3(}xp8_q zH@+?ZJ2f=Uold*ACe*Lp)_Jkze9H@oh;oQN<%|iOl=H~#QT0p;hw(r z7T|uX$v=~Bt>J8C|3irGwhmX1+T(o?u6ZRMx?XZ~$2HbolJtIkjoMp!OSnFZaE1~h zxx;J~W=W5d9+2M4U31IdS9(ArnI}D4BRxQRiIzx)^gMa;5a~TOVA})^Q$n;lbQkR- zNVkYOLDK1iIvBbsI$ibM6b|X)@20F!o^(@I#6vI}h)tROBbHvLT;=AhUteL}oOSDv zpgHpj)S;WQv!uHzTO{30**VhPlod;7%J_2)47gAUZq612A)JNe|B%2G>ZBUjM?@Q!m^k*qe|VzC-yA z(meVB($?}9NL$*k-gi@zyNL0Wk?<(p~Ay0yPr zPGwxx^27vK-#t&J>B=<6r`1NM`!23ZI$lw zcSJYO?up#eR?%DoNUD0jM zU63cC+rSo0*HL=55?lw_a@B#PTMQhl{8N!;z#^oL;B2KYMp{f%A}uCDNE^^$#E1p) ztQouU6LkTYE?vn0;>~87KpnK76inNTp2bJ$e{4lzW*csT0ZXv(Gt%n)Z#EV@;6QM~cBBvJV;s%N9yh@8OzbTinks=3nL6s3iA!hd+z(2TgLw*=kJ zE6Z1n*oG zC`MWbizS_2hHedBjx<+akF?-)y4#p;Cfz)93(`DNCwZG>eOR&+-3eHOcS~-(Y#LQz zHPW`^2PK{UKYg2VG1E#tiv<@GVcj0`Z6L!e?T~y{@;S-pkv0Oij$c4GgS+-zzjXVl z-$w?k_x8hnrDU2;I!-UpMdlXrZM~-H%$TlnO{Ck!ryXhQHeLB|qT3X_C+YNvZvSK( z;oo}W75+M*L_O<&=g!g5N(H=+Xuw=IC^?|BozuH@R?O7ByjFKlPclP>enWj*-y@Q~ z&K%~d!@rPW!4!DOx6tW7slq17egi2w%R7BoN3clp&CsnSoxTmawY#%qi3S|j?P``O z3%g(OJFb@HPR~+)5)GJ3XGl6dLoN@HZU*cx>GW2eo`?15HCxj3pnc02<~JX9Rhv&m zbJ5|FPR~>a*`%8R$0IEk3X!&VkEp)W2Q@{PsQeX@PQM!6ws2y~zcE~^0umTC%~Oy+84BkEAblad2E6~BmX8$_9| z_iv$_i{D4uoPH+xjnZBI_vp4>UH#E6e`?cZc!j?2r3aPp4>b_6kKaMDMz96CjVxBu z>7}|Oy))_7(O$}Tdbtb^kZx1DpQO_(WkAq%*ro3U`LFtxjw(o;9-}WT2hxzO_v4W^ z_fF5zR4pXkJX9>{^dWtbS)%mId>Qmy!l;5MN*hGGR)N!7SNkzAE?2h7b50*t2UpUt zdF)0>r}yeR=gp+s*)cD?>{);JC?TM4#Sf!fOgtv(^q%{D1D+z?M);hh(_cn6SHCWq zD~~vRSe|XvGOw^Hvi0v0-ln1jo3pS}75X*OK?SALKcT$s<)2BGC}zGuw*h=3>GV7q zd1r;j)I9!gUB3`wV#%D_%dZQ-kY zC$tU7C5);AcQHwGH!5hzJTs>J40O9?)~1*^3EhISPy58V=r+ffAZ=jo+Hx(rE!!26 zbu(E1R;HM=+sH1GbowRe=F$quGHtD{gFf9!aRUtK>4ZEK^s3e2pj>o4 z4OvuIO9phgb@~d@&EQ(ekt%=0PA``Mw~}uL-zDkvei?LMxIXJ|ts3$Z2r6AJixs6s z{5sNHohbt!rhIsZQ~u-9U4EIi=5z&buBPm1%9%mWONMn@|KkdZmzD8`q|>|I#-W|B zli!$zuZGfVlcdvkL$~GXcGg+wc9BY#?9i%04~8=iSH|(GSgHGaXQ10UK2PaR&kyh2tZRK+ z&6A5Sp`0z}8)7&5*ApGc|xeqnoRLLfZOw zdb$jVoaN_FlMK3qI9=a&BEvR_NNq5#gJP|M4#mby%9#OaYUmK8dEhX~0WCA94{O9n zkZ;TP7+(fGmv90JHg|4s@6#NetqR4GPQM70mkWNFhxLyVBLz?RzmV5$fF71^5y7c#v7Gy(6^Vkna>tJH4Uq1?IdaU%Fkv8%~ z$wHe_TmP;?xi$`0U{4jCA(^2$bb6-r+2ori=1Dr;yW0oro6h#r3)O+syL7E^<;!#g+fwC&F#?yc1G;tOI_%Pvxa)hl8rWU+_K|dYf_svp z^!+6Rk~tcXRuO-~Aq(eIz@qXPq#5A!YHh`*sDT1Wrw?kQIh%BIeTk&g2Q&qjl5Xu^ zgS7U2o%Pov18T^y7`R2!>GkO5@_Qwt6e9s$ma|{-Hz234rJTjc!)oU-)pG}&cIo+c z`L^{RrDgWKDt1Xay-0KF8jMzXxAnfJ@^4A@>6?zzi*)UHk9-^8N0Of-gO>1>5?p~! zU7y1ik{_cE|DbQ=?%&Ps)w&$iTx~`HbNN=1 z{Th+e+vRfCVU1!WR^{U*o!+Y{wh`Navzz>#amfA&M>|Tz$--Kl>5{dBIek|(xR>NC zq+RU-lEred)62B13w1;*mUQ~Q)H6d42nrIlYz{%U=sX5#`+?K*AMg!5K;?^cEO!^D zDt(`KHzbM`GkGe1hNROA(e1wAnTrJFve@ZGq}!G}{H%Xlu38;9Jx4BdTWN(ZUhWpl zSe0+^UV+fseWxxCwq^MpK8du|u|d-5oyvbv>90yUedBw{|I@AB9<`@uP{IH5Q0gre z=tWwrZG5lSJu~`HhPa<+IekF&KU4j$B%MAY-EW_DzVW?b_x#{*6ts=YJHnSv-yGeh zXbYsp+E$WIpQ8L}lChH8BF)3@XC7gF9}?nKU?&xDKdW&1KkpTXUfgf$TfyEVeb0O- zx$zWyM!Lo7ACb1R{(v-to&Nvvc7M>@=zjli-tPaq4A}T~|7J(|hPnKWV&cDq#J@fs zV9GXrJ}^xU?u@kWCCNw|vD0Trci-MO{xm`hRpROIG%Y1rQYnJIZR()NuL zBu`O#xB}^CqMJdkynD{*$`_Jv!G4~kdu-_RUk7#gtKr5`y>Sr#PY*B_(~-r<6-bMb z>yc)l({Dt#0oF?XGX}XdSQP*BfrY;c+#j&i@>D)RzWdd4IuECE(A|%iyZ7{eZ{~j1 zRmOgn$&(WIGcKpQpKT?wDD1DH+)sEKj#|I!fT^nkLHA3GhGSB_1R8KZglIU~@4)>K zqMrw#HZu1^h>E<_@E_&5A3|j1r-uK!&i!_!==4-?f6BYxL1g?c)jJy9{SKmOL8^C> zJ??iugvcvQ^>(Fz`yoWh!c^}RboWDuw4zk+RCM=4h{*F&!+-SXeh86wfnVPJcBP+d zoIN^nzk_Jk0Nn2&5-v*hmf061_d|%Pi+zjTZ&wN~@u$H3Hict%_>UXiZ&5NX^UJ&6 zqQsS_dg*lNem>OA#nudPKSde4!Y}WBiqga3{206W<$jBjaTQa*qvB(qo3_vT(IrzG zUkJLN4D?i{dMhaEepHcleJZ~_{^#T5rW^f*;~rH;X|V1$5Pjs^4M6v}xuV*?W8j{z z_x|YrNuhgyAGa*L$p$_5_&I|FyI{NDJk+3DgYI#3+H!v(xZgC?px;EixCi!0_xcOO zJ$#MebZO3UKT)V6e--83FAn0`QoXtM1_1Xsx$D_fFM|s1Cj?#3r-uJ-(mj6mUQ7-D zwWs?9z!>_e^x%F0(Di1jcRlsp^YG|*Q@vx+-IK$rzErOZ1Ke*Yy1q^IezLy+cfSB= z`zh7SqJn$iKIY91|Dm3HzTLCwY_E-c_c*y;)9)V0*F?<@U+3Hd_a^iWly{G(8>Y?< z-z;{|#|O}lx6RBwAdj0i+j|_{JrD1So9zvuyXWDN3A4jfVTHgo0PZhIf49nNcRjg?MnYJ zpfI(RqgB;Ta=+!MP&^CbZT&RcnfpSk8)1)8*n#6 zq7;>dYoP~Hx%?(t6_x?Stt)1HKU-vIY?W>|Z&`$~}$q=5Z>w!2@H?Jo<@ z-R|k%;0Kj^`jU3K-=TZ@lCK8cvxgk=?bzmyXKm)bsY>DMZ7H&2G8yJr~{v}dOy_w1q%eGha!s|b401-?b@ z*+de$or>JEi5%s-XAec_wk5h}5AE`pd-jm5m~oF5;$=`H={B%_Zl+pL`i~A+e*sl+ zH^v*(fqPVtt&PY%8i<$6-J^g$8R#Abj5q^zpL$sPin}qMw7?&5_)fpA|9ExaZuMuV zfV-8Ssdeja3Fax^-MKH<2;H6f67ntT-JSUcm3KGZ+tAI!cB4If0v=EScOyJsE_HX- zId=D*6XkMuUpZeR zaJPw@)u6i#+#!#+ySnZ2h`VcBuJZ0KZIq@s=j zQTt?oyGc5NZX1!iDcUKIxqF`ZzJWo{-Q=v-2;EK1WH&-?XxZ1QQ8nQ1S(Yj2+#R@a zjmX`j%sb1E5qC>*T2`30rpVpF z%hx{O?$DJhXx$yT0ot=2(A{8*VgLu&natgR8`g;29khgnz5(urS+zPCX7230H|gt7 zIb+&E+x>EeEV|H->VNkPSwngIg8TpM44HD#?C@V^{ni=MTRb})Yya*UvViiN{Q3;p zt!4M0o+0Zh{22O=&yZzUbQ3OhXUH}+_*-Yl=u7+qi#tPBE9l)BGLL-QAb;x&*+PE! z2X?=8h8&@Q1+hCrMwa<8^1pS4Oey0GX*;MpLzdBj9b|s%4B17#{lT(3L)Kh6JN$wY zcZTe^YjC>8FF_L+!-?K3ja*$&X6PMwyfP5vRC`S zzk7yETIw4VrB%1_8L}lv0eh_c@17xZFxaNVogvGv^n=cwA&Ybj3m0pCNnX0e6NRLbtP}J40q&>wCzZA>(xQ zbZ5u{<^S7f$TBtH&X8p^U>Bc%_Y9eFoxk_HGh`RKT}%GsGo)ALPs#tYGh_-Kn#Jx6 zStR|JGvsy8UO8?3vscEPd|J@Gd8=oYKMn59Ttn#n98}$#x6%}-?nPQ%_s{kg(}#QO zQ{IEK!>=a0l-EnyCgwdg+q(nd-f1+nVK%Q1`sX{1^4^~9U2V@H+!5peND~Dtj@+w42GH+f3f!wf`f38+4dlBQWhC7k2=AuJY}@u-r44-q>0UFDc1Iw5 zg?6u*sJSB$3@=Uho{2aeLfm^M>ZH5ZOyu1e2*2&Yy=Efqu7G!~b+EbrtAe6?1L5Fv zuaT%hx3@#M*G7~y`uY1!_8+pZ1Pn(zf6aPvc z5ZS58{Y8J=vlz^ry1(Ghd4K&|12N0@3c5dri_y8zJ&_vtE)YIC|MItL-(wL$=l&M0 zT3_Ma-=bCP3$FjSX#Dp59|3O#<=vm6|)b!{`p>hqMpfh8h`vpfE`oZWM$CP_^-5eee4~^Z!>y88b2LI`y2{U3Z zJSymZ<1(h0+1NwwH!jf!%?ZCj(s`&XV~)2U9&#SZIC4(-hWy4M;C_-aME)JjfEz&1 z@4^E(&2ztT>020tcSk1EOzH9 zg9Ed?ulW3hk4Liu>tipE-Fw31m}PT3QoKW#g^nzbojWmaS?H?r*!dG{mW5s{k4>G} zyDao$dF)OTBbSG^zXF-GJTwnEDQo#0Z`;t7SHx}`O1UC7a$?c)(9$bn=S{3$9(wYM z*y$6ymWMvRBKEL}!^=avFGUZm2pzdJcK7Y`R^UGRE4;X*_?)vAlrBtIRJ`D9{`O%- z=mzp9)~yJwTN=C9#EuoAkC(=7KXG_P=trv`SrghRNdL(-p#y`I%dQD63dT-PEv=ao z{>{O~7o1gm;gW@g31=_9@Zu7#tfbq~?&1qBELnKLKhs-kLQe)`=TGh;-ySbA?oBHg zZ_LWjkrg)nm7%LD=&xpFXmv&GjESu)L+@6^o;q=GWhnK^*mEaltP0(EW$X+hwEZFX=Fqv7u_sL~Lq7(+t~T^aW$X=;>uTqq@i^#~&>7d@ z?c!TPw_OuEcT&?WM15#NO>A7~kJrTRy5#`6mCU971V4SwwXr))ObUgLzczN&#GX*- z57)-doje|z6Mk5NzWa5t2Tn|{3oW`1@0ZtwR$a&Jx7V$I@w(VsCI;i#Y3qsPzPdTy zSA53!Yl^7)*{XDOfS`PA~cn@=;JM{W!KbOZ60Qtyu} zzuq4idU#~@_2H52)K9uCFMB!Hq6-(Fzo4{q;o^kwTX(&PJ3?Dk$1a+Yc?Sa`-*!%0 zcGc+i-;&Y=XPuXDCjVEuc)?i<=h;qLdq?P=>ew?Tw%ie#xGZ+nr0P4FN&juXZ!C-5 za$@71p^r)5GVd-w?*B@i?fnR-Sst4?`99M3C9UeN(8tSTQ}-T4x8FQ$-rz?>!kL$r zE?knZXu&zf3kyki`AH3PLNl+6jSc0jVD)7+gic+76{{OUPp%-Edm2JNt%yBxV$|KC zBWsA}yt_je)DXSpcZWWxA$oJ~2`ySle6`#&Cwz{qy(jeI%Gkvd6YmYpTNOKR>T&n_ z*Nufp^Hk2gp=(#g?liR)-K_gn`s1tUuk+r}kE?8zHimY(iB&VVas4qj#jc$&aqzy- zkF~M8PaV9^U#4^Lr@gw0^wgUP;03Eg7u*~>J*|B8oN&4=$p+Z|Gs({Vi=3BWe@y1* znY4uxdh_PkOF{*GTW=n^v2W}7p&M?AJ$}b`*7&~5(vSQ5x$N5!?Q_y6*!#U_g!Tx< z?sxpmra9pw+C1d$q4>9x9LE)-$8AT^~uOR`3yIOz7EA6Hg$|V^Wc{E&k4WTnDqH|v2*92 zfo}WaVSJykFX_M5lYXV|hhbLV<)8hF9(uAacHPwMwR6G;cRQ$Az3jE?m);ut;-*t~ zdE{R+c6ns|Ne!{{CQYt--1k=5dX{%v!LPGJv zMWr?yo-5PL(l-w$toO_O^mypN)v=2v7OoGiUd^iPTp#+@WK>&d?wZ&$w=Zs+6CUMK zE}zSvSiiO@cJ-zw#+?84&lUpqpBZG+ z*EBZvv;Dx?{OC|Goj+dGlx> zX7e9@&Vex?I`c~Y0TZx<^z6+;YafZ-eqPe#AAYXz^ZyT9=L28m_&)yUth0=U_2(Qb zQ>WV2s;Q-wVQST?#b{+Qq*hjv$v&(M(^*;>hSBOCqG2%%!}^0TtPI02gkgLpL$p3B zjnVIYpFQ`UtG>VUdU1MR*LDBD?(6<@o^$3)(GB3=+NP3!6r|@eqA6S>+jxpvS>qWpp}4>911&tsC!IPR zQ4w~j13HeRcImtQLKk0wE`NafwuW7%?^N|~4HKp1R5f6WXTXT^h@-nAjHp|JEK=vg z%g29_$jT$sye*y~1Dj7{T#!+RIOBV|sae<*3{;P7@pv!GAL#g))|H^kMW%y-uDkKa zO62ZA&X8%_9mpb)wRG7A=7w%V6Y{--)Ja=C15bAkK6*$)xZMa9GHoA$tRJ#2ms8nW zJs|^%;TWB7O4ppzcInt{9IS_LU{L4~_1sp^kg1(RI*w#&JA2smuvTN2JoM;t>yV`) zV{`*AJr28(B_gX+t6uf=?RfxfNt`|66zDDhg}bGrMCb7$ZL_usPDIX`UdajpGARx4sPe4ZKIFQMYlGDJ!(o^$B`Y% zwS|t31l!`&yq7%#f)mGJt`@w^S)}A;LPZ%I+tn#Y`D`9(D$lUT)E?`AzapEe{~7l5Vjv<*l8#B1+2R4!uSBp zO=2SpcnY$xv1;Bc^ln1DTB+YFXR-dpLk#8=sPCnxAY;q4iNd$`Z)`gbz_t~*PueAP3+pLO=p-mDv) zhrSfKnGjl5jI0ouu7iH*jx0x3jLfG6qT{#Q>5H^HC?n9r+P)FF`<(7YPcLZxKt^pS zGLBXRn*B$V<-szat)pycBu4E;#w55*G<{!70ciCj4J{rv9P13KScU zNsvc^n2G;aUV^*|dG#^&mB^Emj+X0Qt3}?7-1MaGy(VN0$O3x-<$29>iZ6bO)3G{Y zhj1~Fh)nM=Xh)igtM>F$nXfUP*;Cch*F2+wvs0*@x=)XDwU)P~s8?R|M2~1ZzvGB5 zS-+kL(|;dK^}uv8WOI-BaDQx6V;_zQHv`#3ky(H}KO^DxDGd_kf_%OVlrK zcm{ZPU*bf(SnA(`&EZSbfLhNeZ|mh9M|7L?%g29_d`r9Say5_I`SY&mIAUqn$?lru z+7&XBBG2!#5A61IhG87GQZn^~XHuUsAP#I=U@w5Eby>;C+7_slY^p}( zE$oi5-5bVS^t+Mo)mih>eOQF7`bzcIo1RhrgvItgN6g_y^zq1-u$iO!IcDm$AuqhT z~Q1}OP%rap^rtDh^(z^4AgaRdHM(O=f&=Pi!J~59Ckli z!Am!;7~}T;Fn7C*1Iv%@^a|v8H#i$KE!%F(bOZHE%NmfC2s^E7v1Kt`^D8sQ94*!b ztI=! zbtMYX*WctUzgkv?YzHzE8?>wnS(T81RxSVAh%AYJ)8jrf61$PtAy4U&2Ra7PRcvcH zW1`47T49B7ERVmLA?=a}h6q#3hrAGZLYKU|Q3=Q^kY{x@CPx>ndoK-n`z`9uI>J!O zN=BwD3^mphi>$4XKkUUS8oow-NVWs(*V6Q^ zDksUUZ4;6CTIOP5AINDy7!2^woED_>c6{2E4Q|UkmTH_am?#lM-b0$nuVHq)Oy5_u6A(+wMS?SJFLx0SD3f zHX$!VzEMwMURu_M%vVYTZ`T>~(!x%Jo$HV8?J$B~_=clBHWFE=km-shAhR}XyZ#-| zWS9RikH%{cadGu^2?c~5@3VYx5Ry%B92{r!PjDujW3&E~Z!K%OZdr8t%iwC5ePbZM zHSo)@-v4NQHC!j`zYgNNU`--HPnz9G0hx9I7s9b3!A)@73BJJN54wVH!ilh5LFIqf zv&hw`etg$6x_3)q*T-VIV0{c~RZ;KpnZ*Ibgpxpg_8|^Ya}c}2)pGrosMhPZnQDuE zTcAGEZ?~v}`mIoT-uDdhKS+H@7sz032&;>z-wSXX9jZr2mmAdF!wL)WS%tbiLHw1- zZ+ci+=rOZgK|$6D-}bPwVg1sa3hy@Q;Wyw?(&wYs>5ISP7waQw!8AL;hu@I_94L?k zVJ$tZTEU}RdsyXkkPcWngXiE@INoO8k3FpLUOp?0k=6QIcuAGoMZ zMo#m(wxK<&1Zp_auE1w)T`gE@^9{fDu=3TM20jMbqE*5N511!$H6k;Hhy~`kUJKus9pp1dfw{lMD3x!`unT{HfO<7AGDYL zYVPN=Qg9TVVEAZqxD*($ zC*WGsAo~9&IAohM9x=c33;*E=^t{s}eD&{SC=5>C*Tc$yLv4K;TrTvV!}+KAtOC0N zx$Qly&Vjba)1W`$Mk+AgPM@&92TwSU4)l;N?H1xz zW_{$D(!1hxdr&dHgw6IJYV${)K|>B=$sQ|^!+yjeFFP%W(7WU|wdW(xK!2-{??ayO zieoo`4>2pyPq6cu3Lk(c+uZvPMhG?@eG!~&@}q|9;Znh0z`6y-zW)JyESLJnk)ign z1qXUqb+DOpjc`4jWb1Pd_ps8*P_yoW94cg9+6P}mpBCq{iV^DkdUy1&nqj@JXjX6< z4b+ch>GWGV`u4D@Op6g5#NcY>`PehR&kn@89(wZK`zMp&XSMcYwvUa-0}Vi4&1_8M z%P(e9e#Jjh;TSuen-Rzr`cZHpY|>}I)k41-t`+Xkwm?0qZxnG$a9@ed>KxM&CDXOCnmix%@Q1$b^q1!}91J#9zd6`# zm9BEC{v%u__>!J(Ya?u8@ZE4DoMd&4Zvz~5o6oAYxz}-SD}ww3{Y}#@ILfiwl>^qAA#ZmSuyI=h^k;PTZztJ&sVaDJiB z+HJE>{pU-DsakFR(lgPOseUAr3+l=DOr0+sxL1GHROfVz*T)V~a1tB_pKIGUQm?qR zKK@)_SHmw>3%>FUJ*{3Od4VL0;01P)6!qv=o{RkLUpl3HH5lDj4)|Q+P!U2vu99{Yol88EjxxPwVAgC z1$-@vITh%mx^YY<*f`5RI7{dU;Gh{oKNU_9`W!e`@I!E-iu%qoXmAN)uA2kJT*{b~ z39~}DQZ2%4(r&~oy8*N532a$~+4b;t!4JbPz+9yU?CaqJYUg*J(Tx8=-hx6uR?#h< zQQ({wTAZVnx1g+3oAq0b`i!@rkWW<4?}^e8AC3-u5ncPrl0Bqh}Q6=_)NkM)S;3nAg^VM*Aqr;`=VwAsa^Y@aPs?VKJjR;FbK}%s3|xOZcyX)ct$V0g>p?0zmFNz?^7qA z9dM#3w+#-bTTH$CE#&kpI0??A9&vUzT?1Pms$F|L1A9k`d}mzA;-L;weD8R~W~cpZ z7H+J@{e+ul2N0Nfgjo)p*yObFAvhj3+3tcL=C-f25>8?H4hMzYp&(EHF{d-q3L!8gJOgdaQ(yT4T4Upc+|zEtCRcg3kW zztSg3YPo((Q|t9xrrM(4a@1$P;tK`DOTEp}Q-6h@v$FE+rGn*%&2l@TfNg}Dig>|Z z5nY23&|V%$ z>G$>Mz=H(3ve&KV@cy-m{tZ7*KyD)8m_o}+QgeQz5ow4`HvdDMq1I^e62zu$udLy? zueNA$5#p2Vo>;w>D6M`(Jh&3ESramD=P%;HLAF^Tyj?~8PU?EZrV43A9G2A_Ep9<< zsxaUV&P-|z;y#Ck^^b^gfUUnXaAD2rbKZxX((EL=@Gkzyq~M$3$Y$l;=NULS4Y>&n zli8NW3tk2%t2z5vSxOO`rj5OuO`%C0USYCm~Qhka1~+XMw`EYvk4DGqptPser^Kc6Kx(1{{x5He7PS% z3^U$z>Fsa@+{ZR}2`&&5@;mqrG2wcx<9EDaGty_mWw3GED`E4}$DKP)c3ay|i|XEn z`aeUEKQPLw#7ducP78DMxpb6OZu26z4sNvhMYz-#)xA$W0%s3)^r^kwR^pH-tJSuD z0QL=a?DxQj9rjye`>-L8jOyM97r<3fPKF=A`Oyv!=TmyH)royg% zZmVIqqrVWY7-5(%G*lwUAL%3r@=!pm!*k(?(;eOl?-d;8bz3_|nG9XlQn+-q)1W$7 z_F(T*1pDdoc~SsBa||DbWfxBk7a3rG|1tdCF&x|f=pMZZHWl*gG2bNwn)?noy1>k1 z_*vLwpzZ&H<&aH3_2~4au(bakwuitUaJq9Mx&;AVe+=(~6K{Xx$V*ABJ*pl6e-O^rL`xyJv{P`9-tJ}U4H3EhkdQOxdXQC5|m%ambmEBt~e ztHIUP%m;>ZHk}b=W!n0`CviBQ8f6g{1KqG?y4%W$i|W1%`3LTVjecs1+bSN@&3@}{ z1QBOMS*fg^x&jB`hQuf=USnY=LHWslN{a$Z-mQj z{TUZB(37LAjW#cblfSVSU{3Gb;N9qpZT-bF-B#8Vy9Xkv(IEr}5Ez5?X>O|^+2L_& z(qT4PFU=<1^r*lye7Ygw7m;sDlvQBodn>%1kuf9p1Dr+2WZL@a>73qEqXNI=rPEiz ztrrr)>X= z?eJc~5$jn~1*gEFzdHHl!nxl&{0JO@-fSt~ThE!QkPJB82G+#hTW$V}ldAQb`kY*Xj{i*^;=NB8W@i2U7{`nG zO-29BMy}>3XIDAq0d^{|IgiYRYt*8@J@>lO)xp2nyJsm+C#U#AHMJ8eRg3gng<8|e zU2^gdPJd1+XGic~=d76xSHfX-I~9Dm)#10`dcnWJJ~-C44}X+%n9xswt6@{qWskB+ zOJ_j!OYaiPFxV~C0Q}Fe0n&5|FpWu2pPVgUalHh^C71Xd*P5YN?l?D{1=HDW3 z5{Acbrt5`19=1eJ&4)vN9BsW|_vD>$B2Hn3ZVQ~e$Ke(@UU07`7>WpyVEhw|o!|xV zT*1X~tl({MgUIj)*p1#a=)@V8ARGGxCetBBEy&AJi)DS5j@nk zKe>|qve2Im=Tkt8tzQIJhyqLCTEVaOLy-Qh6D)RWRtJx;CN`~K?;Y(*U%%5kvv;BJ zzqg*!=e{VHcaW<@P36rW!Mrzpe)2PPk>GRSM8Q|Vse;$Ra|OQvXAAxn&KG2v0zIQb)`7%D8 zXA2UmsQ@D!ZSz%dBO}F^D(SvPKg2eE#cf!YKQ7wg&kegv@y zPO)qFCp-l<3(?S*_&cDm$JWn;vxNOE@GWrQ6DFMFNw`$-r|`4F{s>&b5E@VMkF4RR zY!H|(xdh%Kcs2Yg+|RDS`|Jv{cSKo9^ts+k+>*d1BcFuvRbHo|4EaQ?W%WWINS? zTtt7|e7BX36OPmsglE77CcwjY!EM6+j73y;ARB7Y4J67f*o)(UcXdz1bavNi}pJKXZ{wRHT!*Z;JYPyIlTj}6#5!??mkEV zE!-mb_^r%PVIL2N{ZHf%A4VUdt3v*FZq-xcf9i>z-j#iP7#c^8eHp*~pBjIhcY>>2 zEkBOP-zV|wKocB6ci&_-oo#_wz!zrxnEz3$0{5BjX_;)x{aR0Zt z4-vU1!v#Wr9h@WhLD(mF=i5Z4G$ClmfX}a|9q%1TbYFD5cjlz+?N0p;?qc&J*!K>d zFZg`8Tx7QbZc_)3_s$<2BKmm7d-SPDmJ3&_ECwONLE)&*weMFa$X~3Ns zfvs?-n%c{Ioqq=dA8;zfr+i9egH4>61Sc`jMt=>Q1{?i)xK8M6;U=N~6;7d&*V+T` zWxj?}EfYB>H4&=o5#aX$&&b9gk-=DK^Py;_8D8E(iF%flPGv%OL+@G zR-qjyimyda15VfJnFJrgai)QA*fOpK1kcR%Gj0BI?uM2wCj%;=Upj+l;rg#RuJ-7v zz+Z6Ye>qFp)AsTeoSMIL^p)`5y^g+r9>>$e9J0tySNJ2i@b9QV;L|)UOPaVhjoeZ-ZL}|DZDzeBxKEf`Sv^I>A@MZ4@}juE0HT zh-kpeegsV-K`Wef*lEGZU(+Lk&xYFtFM?A#oGvecD+Rv_H^OE}_rR?}@9*7AhQc5b zt`!DX!KH%lhie4C25%HY&<01-;=me&PxbkRy*DjhX7|9ka5xQ4?qa{S1i=9WCSa_C z3u$4to#1sinF5)O0pI-@z6I`YbH8t?0Bi!(M7SCzJOu2Q!aLv~o7cnjaBzVAK~^n- z7Lnjrc&}jZcdRC~(6ne0Tm_rGV>bLU9Bvn&;8xf)px<}`T1m7OM-BA+SFle-TOpeD z&FhXi1Rx3wOdIC^nv2Ga7&#LVNPtx7v$X03EvHRvhT3f#PYfnYm=Bs;;2t4P2!(tW5S;@sP) z0O3QwG(Q4|hzfiU$HS%qk*mpCROl)=d|kAqA7<4R`U?(OA8ql~&XWRyhYP6y1uRof z_3@4zlgCHS#$g|9;VQ%B@J@J%(6_@yD!4EEhCCJ3*So2AaZp^hGYt7bpSnKl%aN>1 z1^4s%2lx7Sbl?{abi8}-znqd_Q`P~vMs4oro!`6dALqDuS*!kp+T$TwZp7LI(Y`<8 z2O{+ZIQ@u|+tqNg;8HkTwB!vqUg&>;cZ-&J_E2}hNqa2ylE>TIRj+n>yl-&(y2k6h z*PlxkF?wKV(Bo~)1(D^4aHYti1MWm0@Eq(Tf2MPVekPnE_+~gk@MgGPaO2Me@a;nI zHwJBjqkkcsi3-hvcL>ghs{}s@XNdHlz3O)>zn-|23Qdo9ueh zP1Qm_2Cjrnd*;GrLVr74AoxYNMA(1BuT{K#8j+(=eRdjwvQ!<^ZxzZjkif|O%|P#< z-c7;-_V;k{?EG@XlVe1_&$?Y!1Z?WL8x9rv9>FfFU1T!~w%qFTf!=|A(y%kL=2zrX z+^Xjw@4&(Hk(+is)ssW9$gc^`RZ|Cf2c6N0*!Y_|&c%1Uo$h-J{x59&>o+(gSZx^O z9o4%u*s=RFgooX?eKv?TbBYWeOczwEDE+oqP30{prl(pwm?K=4TBD`qYO{W8Ry(ya z{5Z7-rN1%6$#H0Jm(?QpLbzSEby+>| z8xzH+!aZSAKn~mwHWTO}cqnWtvnYwL|5oiJ~OVGHO%5Ei2#?3;P!CrFv4CJ zdq%Q@oHWcTC6-{n(7GjwQ}^%D-5vu3=qw7Pk2U`@_vi{Isu!ZYeNXRX?Hx%LdRx3^o|_-@u>Bt11?LKWRPB%Ut_w=& zq1F!bj`HW9;&|MHj8744rpzw5-0Mt{|G`zT(GNV0V*_l)_dK{>=vTl#@-zC!;8>CW zho`w_TZssa$Nhytk}!xK=(5sa<59EWrW2hC+zRieKy&DM3T{_xV%Q_Mi)>~La#?k- znF!0_&tc>EkHXEu{sVX~Y^v1(Td-M}qkIHVVLuDL6z;2sfVg+7&(+7u76wmYP^QKW z_g*)qMpXa#p)RWsHqHAIz8f|nsYfI$uKH{^;lEBDZo^ zJ)GeYJPVE!oIgAnzZ8NeF~|`u{sb-&{4bm*DmZ)uOH5z&#OdCF3-$Qvm+px>kf+d- zAvV{*X@b9l>)^mt#r}kmxU1;-aj+#CnyL9j6+Oy3FDUXvwU&2(lBib?e&8Zb@F+M< z@TG8>$C)05uutfphc7@s#IEmGa1LxnHu!YfW4BLx+{vfA)Rm*Xt6bUY$I)KDzec!t z(kRM;&78`HAA!vrDuXM8eI1-k+l_u7oB?Osbr~?4L8LF1+B_9*=;LtCXuN1QgSgx_ zcnE_6DsNV|B7Fu~KM;+l64(IG#5-DX!}njKMm%4G#1s+{8yot@Ne|)ZVk* zR)NrGz$JnogsTOgdoHV=;ND3SxWF(IlLFGGu$WxttY#ZEU+QoxyjSq+YVa8x3MQxp zXL#57%SG0MD)chrRQ-l0xr#B4LrG6ox~-G3U#9yW{uvIZCO6tV@+qng|HtNQ;Uu~$ za9+gzd97!xa%}ys(JpnvSnq;9k^LR-`*{rBAFlR{^^OXP8KAuJYyhqPYJ9x+b^kR3 z;sW1d(zEXKv8+!=>oWb-`uh{p=(~ zf;AXi49Dv3q(`dZLZSZ}ZWb--ODny3oH2C;Q@bYXS}W5svW0SjBo@g+#TF_qzQRBE^!k zTvoPd!a6vf9E?-E0T&DXFL112&)F_3Rd5nqD)P^U4+y6zI~yl(ivsE}=qI=xjuaem z4zYBgQ=#c_?OXeE6Ny(@gN>8i3cH2gUx{G5DBx4LPVm2Qo+x1WMBE%U8K%QYLhpyu1V0UD!KOl=!BtKV zPP6n=0~w-5BjFsu7sFYCSHby$tKe$2mnM^zp`U~Jp*c{9A;B45G_c%YsU=<-S2fGh3P_S8>JK!3TLF5!F zBzPv=AoymuMet_$2iR1w5k4UFe^2qFqGL=AquHQ^!Y08iH~}_SH2H9*&_4-h!=}QY zzq8_ro=PW2_~#Nb4t6v-uGE;e`keP~*U4AVEDmpV=4K4#6k9 zKmq8lRUPN>5JgC2oSv6~;eL1;7fo;=DUEvvt{v$d%m0AuMmYLG)7jm^X0*?TH^Jr< zawA+R>>r0)XlvJt@6u0qsmBw!$9qU^N#tnqy!wo{!8@bkx}S`in!*7KHsg^4^ToAu zvEHl3@#fzy3JjWozYljRFbZylO@l6jbFn|cZtz;TKveKWIEm7X{Wox$;E?n17QtiB zbDd%32*ErI3IyK)m%!#6Rs(ZYH-QVQayr(`yNk}(({~(V|31W~v40@`4K~g^DAi^C zPmIU;aJU$+_3IihRyNy2%H9+{v3HB(^ZX|=p8gnKhR$T}h~b+F$B$6ENEdX@2(?GQr;JcNlen+V5_SXlsgTP?sPReOW&W0E zr+Rs_*_{Y}91a`i=s$!l!5y$qaO6d}kKmbboZy?`Mv?#KiwKt+g`g3GD#3rlI|N6k z<9}pmHl(xQVo^XoyixFzaGKyx;A+ADq*FjejMKv5b69x=&w(3Zvv93~a~LVZ&%z0U zzl3Ym!AUssZXC}9waph}hU1xO@DV&ka0h%LY#bu;5}q~_JQL1_jbGgi`vq@??}tr! zjhE1|Pa=r0C;HzQybT-AiOz6Y?}-d%!Kc&Ffnx~sEg!C;qs+{E63(L^2HW|43O@jw z2I*gZs)0>;BQIqg+Ks@}_>xOq)~~QxDObZGbes-`dZm3HPJ&0-{56~hn|<+dm$|IR z;DNUOU(TE%BV(*sMnW$GWnRzVT|-r9m-)?;B_y!$UkfPK|MH zOdG0rc<*`pX+A1&^0R!ZKa?8V1s1{K_(;H&&^N#(u&MBctW!B;m}=W^fZGSeSOqqJ z3)e=(SeZ6QzsSjw1{HU)-&%%XuV~>`ICh{@!|a#%QVJE~R32#2Yc*~w2p+b(B&q1I336QdZ+&8}t8TmlPh;_3`I zT<{HWzth#8sT_DSW0iLrfv#b!W54AJ;)>w!;lm<*=sea^Jj?5`sfA*%S*N3m1%XS}_kU z68byfaKSZjis0|yC4x^_K$OT6f^iE7ucClVI7jeZa5-$E-&R<6yMF0O+yWm)@3Xnr zLb^%VkB6IK(~S!j4kc_LFymN^LA^+@4Q^Mia+B@?wSN&0XL{0 zXLu(D^@~%{=dt=F$Ej)hJu6Nv=G~tg=MrXoD`6s3pu2B@ z>tGY4pMV=-vwQg%{v0;jiq6FZ% zr^n2?_ck9Am8QgWKbm>XBrXomBWPo8Xqpq_8KRl*_E zK*3g?F_hj_ zfpDJv3a3K4OLc|XHJ=~T{kuRl*|d-bnFe&i+eM4txS5CGvG)bihr6sf+_kof8aDEY zTjm*R!v)?E{+K6tzC1g|>a+{L4c>hnOP0;Q!3CnSaa?AW2;KtMiM$WPO@gag5aPQl z!%zRQAT&~WyK#Q&>{s~SB(=}CTYDQ^K?1Wxxn6Z!a|t+RiJAf@r^Z+W(J9yGg@N75)roYki>|iN^IAQQP+%`AH%CdW)_%#+~(c+Kb zTETr@=bMq&JG+XF@atK>7l@NuR3?8_Y{B91Sh0CgMTNS z@9-C}4>t3q$5KLAio>Jf7-4@o{4{zK0d9vIMgA|s*%O^@+&4=JQF9RlIt(8SxrVDR z*kmvkP7?Zga2jl8{2j0*DzF9q>O5z{e-D2Ln}~2?HXo$Jro6MV39^TU!6FQ5MU6{f z-9!4Nmz-DOdfl2w5xHmy`%lHqMuS$uoA*%>AC?f5&Q@oH`!S`-i7DF zre6-gErJK#$o4tDs~dEz7y&mW!_-Q5%bXh-$XH>Ji9zf*C&4vv*_jTnfOiO91?P@; z^u^jevfH;!Oz~fZQ(`U***O6xL=q(SeM<*<+R|naI)YR;V{w4Z{R|qKmHar zL{psn;$fe#pAVPP3#Pm~Z=n}zgkTE>b%I;qPzo>`lF)pX1W{lDoHotL@JhHsq`wEw z6#AFpLZNTXXT{AC1}EQ24Mhvih7Su~1eai+XZP5BaL9D00^qb-Ib=7K|LGW%kUa-3m?-d*erwg77XTc_R7QxMG&K2AZWQmYB zZ4E;v_DP!H3`)!9&*KGt~Hb+#aQ1XJU3-5tHJ4wHUcS6S=Yf19`T{Z_pjgW@4P#9i9iD2Al2d za`;Bre0Ek2m%--QlK0__lboyOLvTB@-CPk2zLVJnoj-!={T2(E$6b?x8qYeGNlE_zb%MezHuxwZ7)g)isQW2e}&^%)HAg3V&|1*~9G zfgZ)I0>XYY{5EX9`fxeiEckZ#ps+6+%ZWaHc;GJ#>FrL6|4jBTN%m}HJ8=h`4~OXr z!7oi>!*)YV_d`>$$!@D3oQYm%kPD~fIlKd|SkC3Tt#`9sF1pd-RWsP|o$KW9e-lBA z5V+1`|74a)D&XaJEXsv`3v3DfoHVw>LVp1E34Q4-_E$pR1UEYDw{Dott%xJA>Mx^( z8N;o)%sSn|nRRSb@siI9=pZiBCc_Ya-ANiWPhE^2F~LyW`n;b z#wx_=0zVZJRl_*(1apl5{u#~@JujV~_c&r#WHJ zBZl9FLxp|sXXtT!LibSM+a^)$>X+a&iFO7B?CQhB7+%R9Hy5X~clp-nTK3cwP+;5N z3pY@}T$}g7VK+G!WsBdWfv`CQ9RC)limoB;`kkMN2$rx0nNvXlTw~TGdgM*G4jw`Q zdR7FzO$CI03M_Bx*1*}sjldd*{X1~0StH@&>&Tx#HH*jG0~wx&AdG2uja|T9a4~Fl z{S9z7kxPGrP*>o@o!m8&p{dYJI2YDkuJ!l9vc=$*caOHOIflo)ceMUFn}?e*IsN^k4W2!Q6V#(wd@CVumb1K0xtq_N1uui!E_Cz{ zz$rps2k#cV4|b>iejHev7p29d(xZMaP6e}{_%_rI6xGr`Gl zhT!YqO2H4phXwDvm*t{K6u1wA1A+&X(4q^R7EOg)g+2!kpY7-$f)CSU=E7+g93%Am zwLZ8PvlGv($#gto-SsVprYIPDt>5aEPeL4me)u z_rRGV-`?v;51TDYB7C0UtKc+YfB!m{8he#@Qc(O%wc;u&vqZGAdOh0&Vf;1RBDm)U zK3TxtY+J^_g(Cf2xKdR9cK9%CcDygb)8O?>4vtE`=A` z32NX3T4W0N4&DwY+4>V6VB5|re568nkn^nox-ZcNt25zsIJ|=93d_dTS^-D+9^KA~Z`5rjp#o^tTh4(bF zxuID}=yfSKe9UE(nU1923U3#D@2A|HnSjM!!1@G1jw7%k4)3M{%hmDM@aRJ>WgDkGz!>Ml`lX#};DekpE_R%D23#XJ7p@b$33gxNJUI6r z90vzFoBR&KNrHV3F>7>zCU~9q5W!GnxEwAOTn;x0ejjcXdDEJDvRB#boA^0V@M)0@r0l~*_VyV8&DKCB# z&av@wM=&3QD#3TcnIgd!xLI%u>=xXsoZByvemtBncmdog?2F6&Tnq_=Z5X5q{sEpV z_{2xKCl#Ck7Yn`;ju3ngoGtiexK;E>s~Sw{u-^k02=4tj_nWYpju$5)Xb=Wh!FvVY568}RhUhgoRB#&{A-Hb^yCr-p$2%dY zAVclR;R*bHS2*b(Mjt7-9(D`<1I`sZa5H-b!871=!MSj};7xF$;P*Fk4U%<*+Vvmy z4`nFKwZw)eT-KAYxfOT|t`-S@hl^;~&34?#UBhA&I)bkWcTM0SYdOxCp(Rc%g0mSJ zvn*A@mCQ%|(sAaOweES=4w2yW+gZopLAF5-+$r>7_pmOVJi;nMuOr6bdpX_+z6nkZ z8)3ED%ku~7&Fj5G{jDMfJj|R=G=oDOTHqYm)N$xn{DO(lFNSrU^$}0kxe`7AFSq$u zIN`R@fdyIXM}18dNFQnI`#;Io9d7W>^2g10M*PJ}Hfr-6{ss;c`jDsSQNd$jpWu0L zrrbDLhy3zi__b;m;8x;CQ>?>CX|jtp!d){1}7@ei|+iL*4{8 z3O)k22p;h~b5HObxK?lh>=XGv^E`1oNeDj2AXBibnr(^TSU5-UC2*SH+u$V&od!J% zhYH>eN5Cd*_VB;JsZ|(^f{O%S3KvkoXuHb_;c8Lf^Kc#Z#<#wL8$|lx7wG})O@VRn zUXk8^If4w4U@hD!3|@fqguWSW7JS@GWGMIyxKr>IaOjmzj}*bN4*RW_5F|PR>svTN z@bNV`D;#6@Ks=l)^z-3D!FR$Hg15jmf?MFyZss%GUR$^*Kw!FXJe;=3sqsR%G0XYT z=N`BXHukT;ZtM;3fx`v&*@{yOo&YDB{Euh;FGUc!NbSmFI<|M$jAx~{(RCDL_QdIM ztl$DTQE(N!MDT97M6i21z9Tpeu7gd*=WZw9mCsX)Z}JWt+)NG45*PI{597gRiJJu< zP@8Y!lL_}?=lVMQ6&ebg`X~QF9PCzAdrUc;9oSTm(6Fw5wN*{UkInd=KlO1I1e@-=e+`#3;R8AEgWR$ z*XK1R7i`L#@EYOc0|cy`feI|epdB_JNo;^a={S?YTd)r{8T<~X3jKiBd9G9NG}uRv znU6%Shfjyi!2HM0!dZRVh`_?B*Y+B?NpNv93$+P=EVLiMC4y_d=l)&rLAZI=2rG;l z>-=u~fz1gO3JfXfUx71){aJq_ND_j?|8hnZd@HQix*Xj@WbitiNru^~;}-Ab{8D{M!~D222+zM9;u7vAFfuF+L1^)}zFeE1E zE`J|i6ub}iGb4e_ty% zGIN|D-=yAL#nOAyH{1*rj_CdyDEGk;a3c-ZvHM%NZjGZK(ZbErT1Q{?BR5I6IUM>E zYssn+R-K*xQdsJrfRk5u=Qr8<1A#0ssqN?lcOS!F!LkDJ>e1UcXof9w0z$t=0*l~@ zaD29-zZ!12*5Oh(N7%msR}20H&J^tVnDl~^J|;jE2*EWNvr`Ig#^Pcu9`afU-~Y2}ES@HU{N_e}@amz$_yDKSeJ%8Lk$59b7B;LAXTl zPB@t!HLL1AKY~VKFrbMRiWW?TGX>|sX@Vbu;{@-5bHtFf!%0Ga>SvTE8t9*fpjHU} z1D6Qi2wS3p@4yXAk0o|M*$?laKofx?KBoc{Xg;o(4u_H6OtZT;$N9anO~2vYVC;<$wbP3-qA0Ft9CL`?2jut zU|+Lizv^dhcy1qIWf8Ih&jh@IK(|Q0^d`ym3tu^G7-2ONvUCN`hbw7eVEILV4_qVo zW4J_c-(Q(%f-i;(1((4srb06);2Q)57z9Ef1q|BD2hxHUz-59Thbsi{fvdCC+O=HL z731AzpHRG;)d&tWjNG@v_5X2V_4jZKZ0tk7WF!Qi35Va{=oi9ag71byu6HKK_AfcX z_-;^(Z)ZnUA*R{#ukbO!o8T6~@4@YY55f^t#LPP1*UTEh=fg_`uYijLKl(LsrBVnQ zFxUZ`mi`IH=%c@7=mgL5Bd8SxI1@JOddzp6 zm4yBxc*zRKekGhJ^!}$1A3*b0m{|wwH_;a|# zVZY`2o-uUv#{x7pa6c`6*3cei95xf>|G(9|=`Thce79)V0;da5twK8p%tLVF! zu0;%$*%LM(FBL=gCtNG^%YI}D5ZngqIAibmtUh~451afF;d0pQz!t+bu-Rjl>|we# zA~1WzS1_=cu4a?@BOD7GXAJv^vngx}JO|E$P5Q-fnc(~2?XcNn?ttrHQ=y-J^1G~^ z2+U1FpEjHkHa7|9!fvLQ$zTcGQ}8-?3Tzg=*Wplx#@PQ1TMX?`y~H5x_cK?uu&Kbr zBm{>MPs2>Zoly#<>#odeh3 zqNd&LUFqL=lQZ#t+RHr2bMATi{Km`{d@h_WcnO?FdUG$d4$iyL;n(0S!9Qsh_I-Y5 zv}?%F%=~kI=iXaXXbGGr60Cze$&xI*ODcOS8l^tyL-XHS5uME+Or zW3=l?V1jKa2JIq)H{fJZ;LmWn;J)qTOwXE$I|1I!;OLhwa0#4?-c)!U94hjE&5s}g zff>yK5fK;ThwNLjDu-3S0~MBzL~k@MjLtG1!?v@HyNHn=h2P4l+`( z>8Mz^Q*AEc`=beDW6atS_k&F~ryipDuz50g8XS|a4(V#0FVcnn>9WqvSJC(JmBO@q zHBG-?k*^l>e!)`gO!ptx(KUX72Qe7GF>o>CZD#Z3@ZOu9Xs{Lzq1tB0`jz_lKJS&2 zZz4+*(pLY?wK!~A_AI>pR%h3|8;%zo)X8F#uU6d87gGvXsweLEt_&(&siN2M`D?{W zwRjy(t6AyfSHm{3Zl&6=&U>Lh%kRkdx%pO<-~qv`JA$XeHG*^CWWf)?O@ep9b%OW9 zxq>5l2KBWngkXA4eviwqR+M^|xmwkarQV5S;tQPmCHEru3BC@F6#O83K+Rc?2P6ye z^`Yb{_+i*BxE{_bP*1G)UO1#x$OoT{-72T}RJh+N<=x<278JQkt=+))fB5U_8}RdZ z%uGP&=ix!!RqD_NF3?KFC|>IgvMONXhzbs86wN5V3CF-j|0}#v=slvb&yYv zXN)x8GPfrE&CzAD!*{?*Q$|`PWUAAD3^&3izipk;lsB% z`Gxl9VY}68PZ>YMQ7Y`7M*b{pg6n5+wa{Aw_#*_X)%XXz_Y9ef+(e!2r{Pn=?!Ry@ z`9Gi!H^|M$F;DR8Y=y$^WB69sM5hhka=e^5(n_|wb!=7~pm4D5Vo2yQ>(o@TWhZ)K3*#UR^s1e`__+63PZp9;?+Lw&w&g7e|4 z)w>URPxW^eI!o#KgXr@$PM@xT;{`tor^DlPRz%7MxLD}_gp&mi@$o$m@(;7^Q{kuJ zIGb1aaPVefP>#V~!SBI;(wVdE1UZLzs!u$+@FJX%LFd?q{g3{nv#}4%WZK&MFi#cE z8)-$@oqv4?kBONIqTkZdk4K>?@B&=`fR; zLVrCRA^2f9Oz=C=_*pvznl0OY46-mV5kF#BkW~Vk3QUKS?sWKiIFt0*c7->>4e(&o z0QfL$B7Zv^N`AOqpn(Ho{45m+bo|yWo=S*~giW-`ffGf7hu{>!yR@DPne^9vM^w0F zWcP!LFTgRkj?+|*=2u8Em$v+8B zg3aJvGlJ2q5e6GDNTWb=BB+JiOj~pTa2{-Yv>#93#**F~?Z1J>%Xv{0T zwmWxQ^zRTwK0TgjCb$W17W^-q zb-%M94nLDBz-B_F!zr-wb3dFQ^iRWau$kbWof$OL@(Ba|$6-PQkA%bTSL2^xCGVgj zW+JvB-wU5;xAk&9adelB?EdoP0hWY~%Hg3L4ieB;W3Ss@0WT5yA@t2$(@;h`OZOG_ zZMOa6``rGcGI)%oUS{|`-2C83E7DFdwv$h0M25@ZV!>Vx57~mZ!5al~;Br ztpg7@HF}*1)(D#di}2Tw4UYe(6zxS!x=I8yL&X9rm~lHPdq;m}|! z{-KeU&u&AKT2;w+_1f1vk@97d9EOcYw!*#*j{f9xn3S-I%xA;#u(4kRCyMmR)?1|c{pk#nx#v*1|4SHjtX?}qaQZ-X}q{sG=0_{4MBAP7G5+75ZFw?gr(3nso6DLJpm*2XWLyu1#Pw2pMoQ<(Wqh= zeA|DnkpF``UvSJcdazur#V)A0Ts=`m!IkCebIse!)gj*d)C>F7DVzq%RrIs`Vq2S# zN6o-h)SPFz010{2sm2G0!yi>^pY@LF6C>oc=Ml>uRlCThPl}K)JU__FcvKxiKBQd8 zk56T@1jpF@7!Q{`s>VM@zSY8R+y$J$A5|-mFARCi>7HR1GLDbLk-BRfX2D_TO?TzP zjUt~X;dG(@1WpwB{R1aIrg}b4Jqv~WnVI;HNcTCs@i8?GyFOJyerp=_*`QWD&;3!| z2DOLxGj<4l{4CZE!Smr-+`!cLPPlrLT3b!NHL9y!gd(fgY?iGJ+qPDFPjXE@Oa>u# zgFWf2u#Y<#B*Bd$!)xF$q2B=4E7kKw{dazmr`h@Ro)cu{Jgzpph@Z48wF|w!0KJZ! z+QCyUrePwV8{m!jiC*8e{t@^Q!SBN5u-Qu;fFBn;=n~dx@-zDL;CEn?-||a>)Y~t4 zdk4MyxcdAhe%+@=6rPhoFA9DL-Ya+)+$?xM+_FiHuc22vg?#;`>_98jV&p;LWom5= zzy4G7fEvFAt|?O&Z}HyaI;?)&;{DDaQQ`D)&ns{m*euXv;AGf5VKf(>1e>+nkQ zHJ<(pTmgsKo$Jlw&tMAuWH?^vm%-D7{y{if=yzoWsUEL*d;4pI@VrF~Ic(g01zace zkHJlXKZFkp`@i5=dfQYodNCs^csATA(yv^M3xx`Ur!hznaiR%6OdvHG{tJf)eauxX zgd%-9+$QW-!gJ9ZpM4rG6ZW59)sF$1W)TVKr@szGbBXlk8!-;A;Ak0AoG^&VySXjkBU{{o}BYz-c}*{t(WBPqXzM za5EfXbL3LK7e)DjqY>kj2EPxpYYPOt?@tO|Z0+7RlD})ywO5>darWook)KOE)n{n*#u*uPshE8vKvi`MP&d(02)H580owo9xZa#m}f?gt_;+AZrC| z;^q`M?JPC^4Hm`L1hx1LeD${kwU+lj2gt|lk5A1ZR-L7`BKOxIHw(c^ zdxFxcRP>vioGYr-iZ}J5R;4z)$tQ-1&#TYj*{Ni13LBBf1Qmr}0$0OkYgP#F7Wx<9 z(kdtY*Kp)hYT8@gd;HlV-;A4x41!m~<%5QjDW}1vpf==m=$<+{vhW$zb0=G*19*!$UYF-Ht3*ZLhb{PAO43`TgYX=9 zg3W_&<Ja202!whHJbqNLmFE~(7s5qw;Iaw*?{Fd&4*c*sJa#mn z^_j^6uYl*GH$4zMmQ|`cj!%|wV)QlRxcTnZ`~M$T=O0%^)%ER>0MXFMNXXF0(8!R` z&`8nH$jHdZ%*e>d$jHdZ$jHb;Mv6v+hJuDhhK7cUhDP3GWN2h$YGh<+WMpJyWMpJ$ z?=^6S`9AOcPoHb;J$tX;YtDfiU5t-L5~H7jj0k54ZVTg^Ze02}Y(9_$AI60Y!pfOp3Nz6`^z@J4~OJC+5Cf9XAvAIus4hujkA~AoDK)PW%DO+ zps;(mn~}1_UcU{l+GqcB?^$sAT6_IVIIg&p9j1kS#t@?%d&50&@(P>t;b>X^4vv4< zULP=)D#*6^A-Hv~tw0f+vCdxq8TRh<5WmET0z+=%=ee)g8=inuM1fK`LoE0cZY#0( zkBp!S*4z9XoGKovFj>y~502?Di0{))1;&qaGqPT{4|o|)lLxBdW>N6M@oq+)TsR3X zlAKry`$`Vf!mf+$^L=h6Crl4`$Z-mtmBd_XL|D$>npl>IZ|Ajydh zaJ~Go|7JM(Rr|c_ZlQ{*uQMDSvjGpxLEs@8ZijQkBW-ZeBKv^R6Ubt@a6W7-wAVj| zL#-_5eAipujAHT7t+3x`*Eu?e6C0KwXnE5<;0w4`s=_OZkVs7LhU+B+E8r&a$hUCT zr*;zh-9`vy{Xw{8rNh2(ErKbMGiS{G5`s~;vn~eA zho?9s#=A|y8e1XvXnqzUWi}DclrqYOjz!_g zaI7Tp3OHWQKLUqISvm$xC1&FC8E}d;iuJIEB+W@UNjwtF&xsS{f;q5#@JXI!F#ra3t)d4r+eYL4fcA^`?yfDei9rY`?=Hcf;-PJDi&%UHjuZt(#Zd)T8JqKeK7v*mpS$5W zNfP%5h_S?MBAh8nn+-?E`XM-{%=TE{=_n|zeHxtM%&Cs~zXm~;9C#dVl~y_UK@ODl zS#X>5iOsN=9aG~poGD2=GM*feq@4%1baLnX--RGY8iUJ2{18ekm|(Ifumo^se)5*itz9RVlE+> z3%7~~cEY))!Pfjgk044O82<<^l-9ct4wNk42S>~P-ZR~dLg|!~VSlNr6>yWZ>LYMF z2J-X#&KHmYkK!`9a0c8a8n1_&qzX>LMxmW#!HIZKo}U97S@!x4xLi8pS-5Q_^WRcn z>|-Q}Xt)5*m5}U(3nT#Qvq`Y4D6|YtkTN|Cw@Xs@dz>WPBJ+Pbf&xjBwQ!Ck z(FwR&JTN55{8a?o!r5@WG^%ZIt~`GR&X*(~^#reM4vFb}1OXDW-Ee_C;69rRrOYP6 z$;_kEHa5f4s-9sGMMT_IS5z-yt+$Kg^LpM#Teq2$CYI8j>hX4q9? zei}}dsu=kcF_)0ddy4trmTh0Siw%Vm0+%_&NL)Sv&KH+1fj#8H{cxhhywB6*h&(?P zE)>yTqYsv{VeB+!joZd3F!(rM*4>12!aA}>3~$~_8mJUGhkoI z^7ZhPz4j~CNw`vyF8DcKSVZADu&d^xXJvH-4<3--dP_5nuE z=g9%7`$@2$Wc@Oe#el=;}lAsF~FA(F;16P_Yvv=R1SY{&Q%>?>tAd?5--j?IOO&GW4JzY{@*c;LLrR+12c z@r!sLkoARdhLqVpxJX>wI};D=vCDKaoF$)(R=~}ycYXdpg24Mz`+)(ADVxu2o&o2| z0qfzoefIiExLuwPUP2Yf{yDIR_5s*4OXmMs1Vz&O$G*b1ViJM{aIsjp7tRz9^vuFS z@z5l=L_)R<&J>RxhP|?6{`Y&817yQ=xJc@HE$k;TJpso`4h+er6H3y}hFhd6w!uk~ z)MsE1ht%z;*RW77oDX}7%XY&hvhJS43yN4g5ss1%8rg8NB=sRUNUEmqQs#evWbHHr z{$k-8I9=-aI2<7BgO@QK#ll%|oOon2Tr43y4SPsm8TmT%zeMVC-s`+@2=9VhC5v5h zX-tw-6W}UYUjloINB6^Co9wdevm6hKLQ|L18r#HzRcy!=mmY&d#AO3laDa5anQ*=| zrj2l|B<(3UP&_s~kB{HdY3Di+1WE{Y!ug`Wc{oVc$LCXKqVPgETn^j^yS`&v+Tm(Qe;EFHMmeN zoDQeT`dYZG>i`$y1Y95?8}g=`Q7AkccI_B8ou9O}!SPm=nDhS(f_$-fR3YzZwu_AU zu%EbaH|#4Gy1zx^l1?}gE|U;u!)ao`Avnw#(vJDxcP+z2>Uh5KO-sfs@98Q&cqcFzB)2m-{SRdAiu@i914JT&kfTr5dD6ZVskY=p~Y{S@pg z3JxzOX-x&K`9BvysZ6V#aFq;`^Kg+Q)%XoqD6MoM94H3tgMB3gy*J_^@yKL26_0j( z{$GKhS}r^S`^p0Y-sOctLNo);5|6Bh!zE`OEWcH8mWFT`}@c3wE7Q_X`@(*7svyv;9Rlr7+fP&GO(P^DGJYoJ;cQu;V4n)6dWcwFx>G0Wh3KtE?gmH zvlA{Bi_gPZpWCn9<9G7B9Jmnnle*srhwioa_x>McE>+@~j38QKx&l5RAvprq3lFFu zCq#i6aIrL|^>DaccoHsq-A=mT4@qJ>CmhBc1QBAv4%mC2t?^m7UEcA=?jq|yv)32E zF=D`8I9IBu=SNgQwY`55T-}v~%>QKwVrASOh9l*HewA1#IWZls={ms0SPPek2Ts8C zGCPKR%&-v!XTup*5}NaW8-fZ+!ZUD@SU74oUqHx#^WjR_zZ;Gdm%D$$u(B@T{E2X+ zcsLtwa)z{H{vSfnDlzU`g$qBmT{aE&l3}w3&JYEU!?9xF;63D&Wc@6-M3Q(jT;KV8 z=lnm7AXj2OaxWVs$>zZ&a^WsGKsuqzr?g^ewG&`JId2JEDk0i$a)(0B`QN9S1LcCL zaDW7hm1zR&zd!tR7~;S%w{PB>bU z@;qE7({cRgC?vcP4ipdVgHxrG_O8JoW<%HfpNt?#TImYdPb@eB`wI{Ff<7TtFar*d z_4RO^RMkn?TXHCPKl_)<{GWp$O*GsArwgBjt0e2keo2-~>sMJe~m(Pa-#iHGCytv%Gmd_Q^2`9qkVn8)nh(3E@IGP|9*2 z+$;w3M_&1)BS|$GZj{Ee0?w5Sj=+VY(12rjKrEgC`$`h8hpR>5lW>czfWrv>o?b5s z%z^Xe!X0ptTzD2fu*eR{*aj4okS&0lrBm*Oi^L;6e_)(Cf*^6xGPqhA&0)Ao zlBnNtSYkRI4w5ol3zvxpPrwag;E*4wdu!dC|FaR)$UE6KI7ALS1Gm~PGe$M?5-C+N zA1)A&?S`|YY~6q2LdmI#aK6)H9rHgML6}UZLvWBZp1vn|#gYT2!DX-7Ay{Lw>^}|% zNDd7Cne${A&4Q~tJ=!_{HzNp<4X5ELa^c7(VlEz<2Ukl7cEL3gGM8T{Ln*TfaDvQ& zC2(R#BXiFG{Rk?har8Nf#fxnVru;Gg%%u1DDG58ub^i-S62ko)5O`f z`DQj$Ng1Ao+obc2{D&-;B%KGB$c4M$D7nz(EaO`goB;a@FFET#V;L^{*-$2R+~;4$ ztF+RoaGjLpD!5t{J_fgo!UNmM0ZG!CaI7TtMhAju(fAY`CmV*JW4uZo&xM1;V>{s( zdHy`?FZ;)zr;22KAzUL0JN6-{kWSV6KeKn+F`W#DykqkUI9g(O1dbPl2k?vhv2x)I z^B4QK+0UIo8$(#cx$OSv#5((K^xLiUu*2Ucjm#SF+SIGKa zII-(I=6}x%+>KI6qDgR!Shx(1kSaI~H%M9ab9FarWjIZTr^xJB3s;JVPrxBo2+jFF z#LeBvl_Z-Dhe)s921kklXW&2y(I|I!qfQ#le7H!eWH($T3b=RYd1s^QnEw+I)JkW| zhT|lLhu}I{@9W`igi20KgOj>k%KwcT4w6oI9IliQ4DP{trvaVwe-?sRaoJ`#L=HF& zmrBe>_H;K=r4h}8%cL{zf# z=~OsGrr#+Sr@H3CPe{y&Leij-Y&A7U;S&Vd`GPwar}r0mYZVG{GPm(W+FDi*+@64Jfq z`Z}5aJ-ywH774*5I6-2#3{Djn9)`=LZ}hvAm`l}6hm)m|t%VCDL?_^Ko&Q7ny7LG2 z>>QX4SI7n1;Ciw63|uBvG0KO|CJN7o8^vS0;Rp$lyRW<9sFubs5kZ=iRW@8EAvgpF zNK*B^%-v{`PB;y2kUp^nu8<@>4p#~f?&r>*+mV>e>PHeu3^&6Ol7y$>1aa}m%c&Ys zU>+PVNw*757lT~zaD`}i3T}`ChhO1tWQav`;R-QeCtN5=b{@`@{p0<~5%Hj7A%Yso zfqihLDA4;#hKU?F89pHUSHNvzz!A7Xl61g8I;T8818%epav19o)Y>lu#!0wNIQS|Q zk}8-3H%MLYfE(q)vv9Ob%dr78HhF#l+|;E2^M5abTCu3-AU4Q>li)0I;WF5Dn_Z@d z;ULM0euK#gN!saftTeW@aEav+bN-(|5GJj3$kk-MB*|>JO3G#%93vKEqnxSl^hswJ?rA(8E{;oeEwgLAYRJkBpfBJH8>OxNDSw|joJs`atXm%xL*3m z*b(#%;RSGYj?DkP2;#&=Jx8LkC@=}Gk{nnDhfCQWhGWFSemBsnB}CKVDYCv6PI5>u zK7pV>Ts|a>X(t|;4OfVT+u#^c@Nc+DJQ98*FCcRMi*S?V#9r9pvCYoP3rA5#Vo?lS zEfz0_t7JADfopQ?=dT!zg`!Xb94TeH0rrp_J2jg5A0->E59a|i)5?lvyDhE1l~nI6+=8hTMb#;?gJKXfdb^ zu9T4d1AB@G#yTS04KESA1gA*Ms^J(Zt6t-%5=qj@a58ml{eU75t`mdm;TG}GmE)-j zS$E7tP$w3@3r9;UZh>PZrXy}<-b-hk2WN@PKZ2WOdb&oUfbeZ_jD5bt$VSjA8h!;w zON@PQ!6Rbf18{>_uoh00^`GHdiFwcj`h?W|Q*dHe2$}yo5QNIG_!o{7iz9BuW#XZi z;db%BJ~&2Veo++9OOj228|3+waFeBwIscC#2onXax(ye0y`k{u<=__KO>nsEKMki! z&fGAOB$KjEgN^NWj(iL^Iu+`i|F?6Yr4b6<4kvZFh`;Fpw@M7ZhGQf|{i3OR;RoRe zQLqSZljnbd6FVDQ=ll=8g9GfOFrJ3nBqz#YSFzw694{^&KZ!;pePR(DD+<-XY2u-a z?__#*3^V8apNgPPlI9J#Rb1Wx$4gEOilMQ{g|px$iSZUVQasQKH%ijpco%)dEMx2Q z|9k|^a=<5WqSU#^WF8QU?|`G^f@N@$?EeOC69fG2b~n6Vv2)-dIGO!j^M5^p44Lo0 z!VU655;6ssi3^{BtE98-gsX-BgEQs4$a^qAJh&KcSt0X(KZ16N`6W}?AgwhP&XNOH z!?hBENrqm9h(+K~;#t&p8k@iblKO6tVDvhheGfD7am+`c=3^ z`ogYiQ_EPOuC# z=l^Ao)0rd(ro%Ck^>4!oQie@%s>F0?5=kl{n**oG`ulK!grFU+b9T;-`9JOnvQ`vW z2q(!0kI&(Hak`C0iUQX?P2-WWOo6k^K48uN4-h1Z0_R~biRsNLbULv(6K<8N_yRW8 z+Y0n~1`o*RhI`>0X*>mRG9m7o|38=lsoTMGiMfo|$Kg0}VJRFh{1==g28?o+oF-1Gm75R$WupOW+i#qA%ehdEPsX{SGb6x(Q(Sa|Jbdpq0z{wJVZE%Y4-*CH}7e1f)pDuO#B7!7QXfK>5b$cPxGEo{) z3~ZFx3NMF!x7&OK&XlCRBAuj_kS3%v|NURFAK1VKZ%L94|~W3g>aI@{3qB|LO3LY^CSdM z!k+ScnFE1`Wbr@d2H~+U6H~e1CD>0~Tn#r!nf6*pV-XKch6@+k9?paP#AA+n1Z@(N zD;IH~^!k}_i+Jc=*n69OU<;fiIWZ!W&L@p$9_%4y{gKJGhxq#+i?LWX+y=LcLfLSJ zgy1W()MXypdZ#q3_&i^S0JZ+a4E8!f8;W0Q_TzpkF2a1J>aH<%v3C@tR zJ`Kl9*5B|NRpInN$NW!2;3W!t45!I~?l~wZ?|8Sv{^EfglO-v?hLfd_^jk`mb-CQd zco5F$^hoFYFG5hW$9|>y1+Mta=HO+#!^wqD!``BBIo$lJos{QbUs)gjI(xn#W@I2Fzim%jn$%7@VgI8YQEv>XK`XJ*0a;?XT|lbOWU{BK2&BMRKO z0tLin^Wgw-@h7mq)Uih%tyL7h!(@4W8JsBwd;_ke5-4oQwY0|(0bPB=w!;y;sD%lwaAg#uPtP!)?|Uvc4nI7=+JN*xq zl`2^cw~Ggk!(}qwuP#8r?K1z95af%+Tj64v*Jt2#xp4GqUOHtx9rh3d_Q2lKn0l@u zha?B?guNZ&vRni~l0@IarE>(k&IQSi;R%>N>pPK|5`k}SXG zZColzIUA09&9?A8I7f1#4bBxFQ$z^m`~|SDgyhpA2c1eZ^jwDpnf3*D!D*6ID_~Di z=sUPwJmSBes*tjL1TGN;Hp1z0-tP_s1(I~3?@*@_g6H4>iTN%#OV%$aW|(ZS6^?>a z#GqHLmDXW<0< zK8JDBySQ9pk^%cm2tI>zMdRKjC?GMu8}^oQoez760Y~9nNxFfXNZKw1nE#I=D3utM zz)4*j_BnK^JVzF4VOuuXo3r5edt!+0fpzl{!Wi~%>VZh6o^aP;e2t~xNTI4cw`}*CLZ`4 zP8SQk-s3!Z{vJ3`s$vzK+1Uv@=l}NzibTVJGWviFkH_Eur^eNtKPNK*4P?{~ZX5#KJ1r zUo7hJAwMOP3n#%v;^Nog08zLOE|&HFyLes{oB`+P@BhDppiruy8E&=el%yN>5f_L; zbKy|Qf&anfVxdvV8)=$GzVQ(?;L)d?dz3%cU z^FMR3Ex7elV!GYtEVxt@ItY7874)rkH!8(|`{5EvxX+ag30XB9C`sGvbIMQ*a!f`LAqV8axpHAW94YHp*5Cng z`Aj%m6nYn~l=p=eI7>V{;tO)dR={D*Ly#*Pe*}ArM_l(4Q?cMSI6^MWhBM{k^;d9+ zz+1BVqC?Dk$=WG!ku;{2aFm4P7+fkzchy%|C^?h}*H{;F-zK=)x!y7V zPa`N54R5Grnn@!{gZ)IIkKr1*!2N5gM(X-@_<&rP1J??F4VQJ^*E#?D9mZmb`Gatn z99RTLNr--d3nZq&-|!O+x!`HoUlcBfBc<%l!Brh)>zx1N>ln8Z^F^?+)b0Z{aGALH z;%~`f@z_+j!p>^r4cJSnqya7zj}AIQnVMB$&Hq^lD&>GJaD`mZ3KxpSH-1OX$Z(kt zM~jC(fiuM*k9w*?s^|{b8wI=O|1t#OlC|H!p;AVEM~SJ#{2@3?E?5uyibB7_fl?(Q z$EX6C1<%06t7QJ~L=Y}9{|^q510ui2EI7dQM43~+=euEupuh|+8{|O7kMbE-9l2jFNy6o?E zf*g?6I|0r$v)cJLrC)*l#6t&6mK?eCXXbygbhc?fQ|I!d);HmD(YO)zkPuwc(4g_GeB`#guS9YLrqFwVl& zqTx*~JRsvW1FjVXJ~LSwQ|~|Upgey!oFPe@57%`)&-_1%AWDYAz|&NL#OzTxLR?+~ zdr3(CfGeaijr@~7B1!l>Tr453goCW}&H3-v%5;(oCc^nrMz6u8Qs=dBrdV{@Ul<_I zPlrq7!nff@>5NUVx6^=*`9Jgw3P@JYfy1Pcyl<{c61Bqz#Kq(OCIrF@;ZjlHbCacN zyxKUwGvuA~{~iQWq|vN`V}-wmE3)jQ4ETo_O3WXF>xDPNl@gLa;V3a6>@3r=gPrsL z1q9)eguCGYDWmTHvMw==h9iWRn(N}R!{)l2cX>NWE=e2@$C(CN^M4(J8Y#PzaFtka z-8p)aJhc}{}+NVanY!5-Hk|bu>)?97+1mmqF@h~?na1J zR#ep_I7*WGb+}2Ypbicwkon*L0xp!8&49y2p?BbXnFY;ojktK2Yj-1B%5W}REFtvuOM!93n3DcJFS4ipBTA0pgK0@BzuGAK@4YabWlE zh9gp9`UHX;ndjT!SW)P2I9JxgJ-Qna;-MGe0`bsZxI{c~VUO-cql7S~M|X!2Cl@Sd zLylzW5javVxS}UXBT1A1$IJ5@;1==NDY#5J=k*t2fSjLtp`$zh&afSm57|&Boy^6v zyHO}HyA_TSg|gr_dHx_=E*JLg)!itP=kJF@C4_|z1Qk-(Kfytg6GM7a6%yko;e4^6 z42~9s{xSE<3&_}uSeGhz39gh*>ZnFAMUtYIS9haS>Uc7oATG{>YbB}b;TXB#%8SVX zQE(>QE*^Rpj2B0_&1V;59vmfQ`4LRep>030I+u7x9H{b#sBVjOfSNhTh93O3}o-*&)7V&K1UjMXR1 z`5)1jESC#jhKnU>_Q55>7x{GO-_*5}b_!e}Rk0GDVqL)b$4r(GUFA#TarTLh`Jafu zRW#lNm&%2w;b;lL4VQ7Ccqk2yl?y+HD#9s@vh1&ht9we-45M+3+3YM zIh{;e?SpWblu;2JC5`MCI9%3){kj`T;<2aUpbif>=YKhZTDjmHTq!Xg-@m(2CAyOAsw&xbuE#Gk;ilzrFy_qdW)YQB*;KfB!lS4j+)!BZp$zJX&Usr&{KV=2pr z;22SGJzOdV{t8ED%jf@)t8kgP^clEXT)q>olMwv}Cy2t40URhfuo#Y$#LH+kVdf@F6wF&{3{r6qFi|OV3JH)Z4w+KA=(O;Nfn(jSv)ZMYI00}|1TXu zwYYo_+$>4dGmsF7OYekJB*wXLmGpscVNZ$qfNOYvkoSX!VMn=WRE!{AT=W}UEFKs> zgvKErdKPYwm{-6hvcKE4xLk5%0-P`J53gLy{ErY99xxw}MsjHotyk)J8r&!sz6r;Q zM;hTsIq#aGj9amIHry;Z_TEqjSt%N~v7tH`ok?8$2wWpoun~@tEdL$$k{E{$BS&QYIk-l0Y8Mc5u9^RLBM7%OGVyoGOi|9rl%wjSI&B z$$^D%VyA+g^Z#=MRpJ4!F~m$@AZ;IFThj8L%ZQtQLuXieL@;lG+Zj5e3rto^88^q&h)S~|1Td$R$ECy zPQ=3r64P~XwRq?x94!}KHy)2j*`>hYQs*DQ@$x=#9!|m|UGx9un|W`S-kb^7$c10P z2gK!lBFSp$l=s3FlH~<(j41d6JVki$EwuKfGXEb(&?ZSz3RlX3f5C}ThNC9nA+g8- zCrQ>j>f`Ms;wq9N0e!mL!@1SBZk}nCo(3GaN5fH0(AM z5(VbMO%93q{}9wlD>WwKQgQJuaEd6f1g;hZzJ%Kr+6H;wP6%cFKDb%#TLU}dosGc! zwVEFhL`u>GMiX<%fhXWL$@*<@ym;(yxJ51qzk?V{XMGWll^oc62lKyO%Iv~Pj9)36 z7`ReAupCYhmmYzW#idu=NsMJZ0Zx(i4RC@OeCkf-f8qw)W!J|r?WDJ-!in<0hj6Nd zz~!#)hM#o0TjAW#?Qg%c;FM2oJ_sjDW9sXe%%@Q)yZhl3NxDL~R?6-tI91k%+)X1A zmp=*ni$Z0vQDz(X51cNo+A($tSuDN$B{)D1sD^7L2YTH@7K=wFn=Bs8gHxmm>fs_W z@XD!tA7Gcc!4=xhIr{JXRPKC_*zXL(N zZ1@*$mpYEPpH?eX@iJT|7Vm?NMYe?(#i5{tXbRjQ=dXkto!l}1k0A(?tiS33JRk=q z!Uq(2FLcg-_XoQh8IqN^!>N))IdHfr_%)m^ zA?X*7!V=>L;SvdH5!@sm_yw-$@ThbC2S0?y(m0-m(?o%CxK3L0IXF?0bo>kykeDxm zJ;Z}GaEgTF;)nTYX0BWFe=34z(eMp8N?LIPoFt87Py+A$a=|P(P5QzX_&}DO6RmKx zoOk0RcpMLQ&HwobYUP1X;3SE$$4oSq7~TPUh|8CmEFSm<&Xf@OJ=)#K5`G9y)_?zZ zJ%SwB@GD#|E)Pj$xQK_Ifg>a*cEV9IZ2p6jx7!|we2fpT(%2Tm>DwIkhW!XqI5^4foDSnH1m4ogPQVSK;kD0Er{cn7xIh%% z4%f>xJPT*Y{+s5Jl#+BAaDA7Dng5?5NR{5)`*}X8h(&k9g>qp&oG&3e3b)G($G|k+ zcx3;ha6{LHE=CDlY^|H~{|^K)qT$FFP)L&QdALC=tb~(o7aDH!@rWoi5l)k&d<`y_ zK2i&(mvn}#WBy-86}U3B#Km;)CHzYjNx0qt;eXHIm^ z|8Xx;_j2JvxI#4k9Ilq6@>;+L2?^0XaEf%kRdAfFe-EdLM+08MfUTwnob&%N1o85~ zW;j$D%b&29lwnu~(@s400$d{s?uJ_=>$|^<0+M6VaIxtjYyK}qP$Qk|Fq|L?UA~Z* z$pP_jt6Z=So+3GP5>As&cikd9D2*uvPQ_zg^Zx?`jZ${!;Y=x`n==WKa3)-0Wid(o z1)L@!=(CuY(%0?2a4(!L3KhV9Tjlfr4+t`xS!sS49lV6bAqqVXXUcjh>?#-h1;$4ZQi*9e(3mRsO-Y0XREI(hy}xJmYV=P>`%rBU36 zpj0eg12@Y9KbkCc9JrJ$7Ym<&>*d02aE2)KH(Vy?hc9FPdy30mT*i165A22g#l;uC z&MTErOuDQDbgvg$c1HkCgjq|TE&75Y)F*{PQi&%hSx90BDo+HZV``s z2**i?TvpI}#o}Axcv;VKAjpxbHT>?f1uydn7{wKS$D z;aqv%QHG#GH2en+5SNc#Nh1=CUxJfG!D_fsLeOg!E|&GlaE6p!9-MD0=-?fn#vv}h z@(n^DF`5b2NauRjT$c-4;Bpc;;Ztz4@D8|6F8mkH6qiO6 z60)s!BYPQ+mkam7{?d3ZdW+8JRJddQPeITkb-of#5{r+)fpWoBYl)#GT_W5rWw{A% zm8v)mdv&?o#kk>ZLf#p|&iS8)AXCcfW4KimaxY?C8p-W&y?7)CP7sT~hBIW?^jk;k zl@L7$2X%zpIsc1Hfmrwp+#nYOuP4iepN74~qH;J(3^)h-%KG?sP(XMQoNRj7n*TKj z@}({>F2-UjNyw3@aFe{(zX4~-dIMZ1SwCn4eL@tP1*b_>ZGqDXLD&3mMUWyfzi}gF zCOjXmmkU0D3#Cdt-la85C%pqUHrq+L3@(tI`34Rsllkvg!aSD;9)c^SF|CI~Bt*Z$ zS&|bWn@D1*nrC2tiTO^rT@?He4%PV|xfvHrj2FY1l0^IAW?8>v3oaE8#li&=!qsr1 zB;|29bBpbft4r~i&i^C?>2ly!*h4&W#(Y4kV)Rx*ATCXZ+hu(Z+$=fMa~oA99=a2D zgo#UY5oAeY`4-L*7Y}%kJ|K?t|p^(ibNx(D`^kgS69J95A||G!7jX2pb%1XMGxMWM&we5vcra89N!C`uIr56t z;~Ua`dA_u+>dr1=3!THh``X6GybjBI*0f)Hk9R%KTKr?LQ*a{B&iUTFabKxdw zt^b3I#REnyIU@USfvcsgm%xr7aq*W3YGi}=*CdU^>^?YGJhBE3kdXZdXG!A;JWL2> z{R!BRKkc^dF!MiLvhr^>M2U;Tzagd)!x!NoIdCtWFA7~)$Mh40W8eZ=Uk*pe`jI;3 ze~27-#ka&nJdgkvNDMc?&EoP?aFJBS^+$MXmMThxy`&L+2p3A@a&de|tCXa;70wYC zX2H4AS`Wg7Vo~3ETr4jn_rpO_c7$X|d=k!=3(MdT$&r8HGEsQ! zF_Km+dI6c}i|Mwwq zmAbs>1m9Z80aIYlckM>B60VghIR>|i$FBOB^Q1K=!fmp?2`=qapmYA8Mo=g*y`c#Y zNYbUjQR32%;gW1yA@^UH4RXQlaIutS4ji?}-v2cm-Ep3C{`WhH#p0p|;UZC}$Xw60 z5BLQxwqi&KgMZ~)G+BQd4v{h|hkd2BpMy)y5L)wpd@~wJ=UW8VOH$RqAyU^D|Hg$9 zqNyf}0dK&5a$y5pBxOG66dp#wuK7O;L9tl81@@J?ZiVY4<~RP%fl}A=;Y#tqCvb^) z$fE@hO5eBxE`C$y|1ty(V(~X{nbf`C9~>wOJ_NhUbX;$)OBMVIM{Tu37IK>Nq-vgl zGxY!ew-Z5_#OyyfTsZPiI-~T7#c-)8v>&dNkX+JANJW8II6}@_4OcnDWycXTiU+R# ziwh*nli*BgL|fq)$(b{7lRQ8A3^^e#Plv1JzCEzRL+ZZg-z1I1{7$%BT$T%0N|JpG zH_L?s+OSAG@Gx8~IZ_OVNm>8a#{4f63y1&13xrtsEF3CXUjfII*)i>QmJ3Cp39!Ey z@CsZaS$_bomi?Fh>)^*`a^SRo87>mzH{nt_pb_>Ik6qJ_hs1!{aDXWA9$YORX*2gr zQjc+*Bgr<~7A=5dBxyc{DNaJZcV4&zk>kx~|iU~f6l$Hl`q zAQr{J9&+GYaFuxI1ne)J@7fDIj50AG8E)xHTITn|-NR@U7d{Ht%6bW0Ef)U)Pm!D% z+1lm0rq;9{5<2p4q%pXn%^ztxrq)|NvSBu9s!)=lSf5H{wfw11> zl=+5a&Hon=c*-l&Zn#hyQTK~*p;#CV$BRNs;RNBsaG1pWaxcnGI3D)Lqh0fV9fBIM z;3Qlr8eexY7Kj2Vu&?C62XKTmvh#2N7g*n<-rR>Im5^q_flFlme}SM(V$|mn43t z{9jt@6PJ@D660-fyOh!2a7DHql5js1mgirDtHq$baI zh)a*aRT9H11`tzGAOWrumv4aMB!s8T{o?ZLufPDgFV%q{T;}nIu)idsi$4d7%Ws8S z#G)*?Qeu1%ju!>`UP%>*NA8E~MPWxFf+{)SC)itDI%J@SQ6!D%NqCC9be5Sc9{UGQ zmYf-T6&{k9zXS)^20Dyt1jTYeuK*f}cw{o%Br(f_eI?22;aVxXD+l2L@z_i_LOS2O zuy0q=GXGl;_{o7I2GdwXfq8I(xb!2qSrl@;nyQeby$vptGR=k)<@v8*KT82~{`&?J zLrIDU;1KC#YvEAgpW$dJtDtMJNJ91$TqQ}m11=YZ{)NMw=XK2gh#^=gE_)fSlC0ea z$4bmEy4J(UmFYJH_O~p;pp|fiTzCwQljpAr!o!^*>74(G2wEkpH^KRG!D+Z!6uMz3 z3Q5wX!6lMIAHz`+bN66cw`Be8a9qdp&iS8%AY5GhHS8}r(eFABqd*jT5RMlGir^%P z@h|4OSR5QeUy+bK4M&+dX3hU{1l1C=b8w3!+4y0EL~>*i9B7x3QDd@<+lz-2Qc++k z93UZj18(K~uKC}9z)zBB(Dl5*NJwVE(c;oAaQRZZ6}Q4EWj5a!N*@r9%!eyv|0i%^ zfy{r85p*i?z#Z@uaoI9BP%QWcj+3(U8_9T;PWKRO$X~}@5BrOOzrq3f@BfC}K&O&M z@(i3J7VLy$!~_4qjgnN6VU)30xEKzQ9NG`JNk}ib(Zfh}$OW+o0!72saJ*P}91ao> zTs?}Mk=C7LvgF8CI8{P&1`d)O89kc$A1E58BRC)-*aJsPC+rzctCf#pcftu$1-WpO zc;s8SMid+{hE^<9_Wf9o2l-blf;wIjU0k{ucicpbgg^ZMcxc4`T`&Cq_^NUAje|jk zKYzr+Ja6W>ywhnu16{&L<@J5RXN^nZsJtC7_{?@Rjv8iMYyP1N!^MbW1f-1~W_USy z5quFm%gNQf+>D}Mf{bXF&NHv;?PfG}8)_tV>*USeZbmKVbv$o&^DEqpmS2O6dguBh z1Ko_6pM#80C$Adh<}gzK2{Hnmg7*iz8HHzUPPp35@H=5Y;Bk$ckVEqeFIL(XbLj2oP7Ow2fd^<$Ov;DxNAIN`V9-6 zJmhAY-5)_lypy-UzQ5yDCtnfC{AdX>5}dpeZa*DlR6E)K7Wl6qBi5%b) ztDEs70`)*h46k)|jEooHii_<7_rbY+Z1%Z}3%zXx5?~F%R#*)>4?7j`>1a;3PyW9b zHC%aGN82kBq z7q}S3qw@~G$Y(&G#PPQLb>zw8 z^ZI5YuN8SK^7`?46HIy7&G!C#7P%M^H|NbYOHWAdbp-#B_QX(om94;4r z04^5Jgc~TeEK1fGleag^XO|;P95P{^tAP?Uk&$g?*9r7 z`7&?hYwVBsGHz2yV!TJbKl!5=t-p7a3_BO$H3P)xed-2zABGEz(btt zli&bSd8m`0gNt$G6ekzK-t@G)ocv{;i^E74!C5vm!_m$SgYr>;re-}516RPY&h_Wv zAZp!OUk~TQlbq`ZVT0PXxE)S}Z*#6+y^`0A8U)q>lUI`K6!SgK4KKjOuoaOFaGCJe zaHVj!Rh%b06s{A#4{j8G*@2)%1Y6;D;iIs}t+oO^-oS;zBVm8xhv6XM95|QM;g9im zq}qq@D%gCxGT+@DClM5gz^A~)SR)(>7YaWGuN7Vc7r~Z?K8H(Xy$#+5TM7(X?PAOz z=bX9BZ?7OoLf~y_1gF~@_&dz}L$I(_EI%>yU9T8wlsMlkqwnU+BLAUXFYEupbyp5G zQk<{C)2Hz5SkX`;&AGn;PG`V(3}P4Jf8{-Vkhdm2ucD1`xz&*2!BcrHk-tun2p7xx zMmXPU7wm6_lUVQgcmxOE%ew6U3r@85`>|oxbY8Aeprd`j@4}gIQr%3jW9mre%x=;4-v;)HoU#GJ^C?ve_4Nm?Mu7R!A)axy#{lUDMxm5Za2ZtGv&V7#~ zZ-A|RE8rI4kKxio!^|A%NRwtb1h)43taUNGgvY}X!cV~d!ue~dbVCH6upvhH6dW&n z+1tDZ2}i=|!cW45!mHpM;XQCYju_)K`1iNH`1gmf(E3mse@ou71;)mc-w@`2mqoXvgsEYos)sNv_Vv4;X3ZbrZ{Tkv|Yo8kEbpH-Y2ZVBNN zx@9pJE`%%o9%|G&FE|X>|2foXxS;bZf{*#|^y&ygAYfMC+r6dKH{e}*$3VOySCU5bRWxSllq}XGNCs=+uRAe9<{mqeKZ9)$+;WNR{1ip8HP3M?KOn8LZ!}Bv?^Lv=Zus;9S|Hn_v{J-lbX68*U@VV-)Z*3n8+Qb_L z+`~MQxZeq{gD-UQb8xBbe;clp{a?WO-{$Qt@VTyAUEY}jABTh0j&aRt@mrX%!db9+ zoB2QUwjFS*tRIKtkJwq*yVS+Vf~~Y21s4d$l`%y=Z0d~gLU)G&^+LVM7}PP z{XHJb+x@1`-QDW*`WE`!$$w@R`ds0tw_X4HcE&L-Gyi9X_Ocx=Mx?Aq!c&BwgyUf= zw5#AOIMDh09ykuRT-XBpbH4R5)$e^=8iv4nn~Fq`EHRr6R|@CDzDMl~KY;^z75>AozC(F&xLtJ3JwX9@=>49-h3qFAZvA}9|zroS4^=|C@0Sd!b>D>%J z2VdlTem0y5TOL>mm%&z&{c|PXnwF0ZHc~m!jM@E<<@H(Xb5*yac_Y{Q%$iWkSBSB( zc8>MuE5nqy;I41>x6k5-fcFP?eJ>vII8$_*&3oX&qj@LR`drcNSf2aaJ~v&7`6Ha# zZTuhZIcB@F7H0R%w|yRTu6+|GgcB z-XD@Cu$4A9!Ue(!u%ko-uOWzntqXU;F|z&>?8$|roC;jDi+5MpD(xHLEZF+U^e|iq zKkVF}4PU@{+-H^9~^TwBn+;=xA z1^03)J04yRTi>rH!3DB^1zdt&>-j|E)hllT{~hjk+e8u;9hu8DnM-f`ec$Xb_e2SlhpM%c{uY+Cs+xri~ z-G$G=p2F8uyBHS>-vdXyG~CD`e5TzCs_6x_?Y3c?*wFu+&2{iMtXq!0;4=maY&Dl) z*n|C6THgoz!q)x_*k9JSz=ad9H)0qlrULb!@!9w`G_<~T^4Q0hCw?P3eqdp47y-A8 z8PV}WEt6-!sY^x}4Ni}~1{aZ8)_|&ji(yNlU*K}#zMnGzg>QBss1rdl91B|(u7)#Y zeIJ}F{5M=J98kkZmejlx{sp$`a31^@e4*0-$2tVY54PX{Jdm8REczD?5FY#m-xdhp z1&2t;(%|c1s~x`skC%`ff^UVpz8g7*;4WKW1nze+?uV^nyBkh~ErsU8vt<7UI0d$1 zUJE}5TNeKZzYJURV#t^LF;BSD1H}Ix1S{o$ba)MHDex}*E^Hlm7=9n_<8)!S1N?O` z*!prO2tEp1Rd+9Z3bqE?0=V1xVaBEA^A7CVgrF}1Yev_>!LU{C7aZhcJ#1MR438AP z4<0T1GvKkpTi|iRN8m`<2L<>cAOE!2AzY5&GN(l$a0+Z)ct8A{@IrV#Y$efFcrk2w zs2*MpTOREG72l`9R(~4~m%0PHw0Evje{@XOKQu)C*XdtWx-1L zI@rqUJ#ZLoy(Rqt-vnDB=>H9GQLq)F+u&H(VQqK@!6UNaE%+%p;0t)Ztp5WqfvuPh zs>36)|1Nl)@C)!Zd42=D%NXwH((r2ppUZ}B-_rZ#fT3`stltN>$ok9hIa%Kd_vmIT zcog=5ErWX;p|N#y*n$xVhOxnN(L?YUdEixeqO5-aPlc^c_Y?ex?7#Rs7h?`=^?@<) zOS1nlc$ou%b>VUZYhY^_eGC`F)>m`C!JFZJ&ZNAop56~zjpr7)9=6K%DfkE2>LaV+ zM&Zw3$Il}83&Ba)I`GP)F2;G-O1eAXOI&P=o`VBmD{0rkBVntG4#IcBRu!FtABQc4 zt~tj1pN+t>_?}~oSK$}o1+Y~%o8SyN;9GbRY*m5V_k3+4JPckb&p!aaA-wo|`u}PX zY-hupu$9$6z?)#prM()+V%X~CH^O^l{SkN{Y~{pK_*>XI??d=!+5d|JL9+-h{eeCp z4~&EVgRQK60`|PX4#7&ezwjP77`8(42OI%g2J}DfV%!2-eZp}Yf@lO*jGloLVJper zf)~J6l70ba!^nt2oA}Hui@|Q4Mw*{#wTng z%~1Fc*hHuyy_zI1}zLz?}b&At*p#xpXtHM9Pr*lJeKq_eZ01PE{QnHWUkEIh{ss4Nvn{-`iKK(A zGP?u5RMww^ePK(1b?^Y;gK&WCKL=k8^Zw8||F8MQ#TbsDs}I28of|sF?~CxQ!kgg9 zuoZ%D;d@}KEZt6$#IV(Rhr!RmmVpnzufqI48$0LsVg$Jetg_h-uZOMi`vd$TY<0F? zzq%NQVXHIV2>&YkAAw!mZ3UOYZm{*n^dam8_p;{yF9`Z0uws5`Ge6^mt)v?V2b&K# zd;b&gXxNJJN;m?xa%2x24OY9)=y(hT9O#mJQFq^I*%xZ^19XmO@{^ z4%qV8Kk!o6^2nf5co4SA@Gf{0Y~A+)T<*^Nw*(syd?FjZhWEpkMcsaPF^JOU1cEtfw8kASTZy$VOdR?>a|Pl7EE z{RGFz`o({^7}H=YDaXK%I}li9^%#N_*mC)D_*vLW!jIu>*mCi2@Y}GJ1DBnq^}^P9 zx4>J4pMrP7mV&EcM+E}w!p{(V1Y3>hFZc^N;L1PAdf2k~4!8lf6nGB)3APko2e-@m zLAaZT?ZI<@GXK30ST4S%l@P$zf%m`z<$)LBVX}V{JQlWc6th@b1*27j~8U{Zg z{J>xI|A!G+7B6PQQ?g+@{H(110KW`dA?S66Up0U&m)-~$z?MRfz{RkYQ%m9ZWc@=2 zf{zeb9{2^Wfvp2C{hKO)EepoMwXhYkC*W`3fzH0L68=Z_?}7h=ErtJpy?fY6=;+_( zVhloHdEhqqdf2+~ng2)HnZVgx{r~?n3ypoodS`qtL(FdG?n_yQ5M>!zqQY!roJsmMPG_isnGv*&gYzaKk@mT>-+nAJig8MdEW1H z&ilO2`z)XHSuWTQ7E!+f+zl+c=zVZcu!xC2z<28OTmKQOl!2RZ1N(rdgZWe)RHh(- z=rXJauLTPiehmIMSQr@dCl08=BFfu<_v_??z@LJJ!85?$fklJ1fX{>({r@Ere%2LG z<1aYBW~58p;5uM2Zi~Rpz+$nP1Ga;OM|OZcV9`b2g8g8z!%Dh@#R|-JSakhwhlJ6( z0)~UfgGGxMfgc5n7}*1!2NqN7S@2>VCtt><7Ay?z0)7!Jrs}caDlm;Pw*D_e!W%q+ zUhVD&zXcX8_!ayPShTps6->oo;nJSqV>1&dK|7<>+l25Ia6Wh7ii zg0MLA?^vZS4mgDY{lQ6KA)f|r32w}TY7^K87F)K@zy&&aHI!7QlhdPzN0^+i|AUdR zP^T~pyb&x6cm@COC9sI{5Txknjl- zL<>)YzXyvQOQYC05`x z38KR8;5&5%JP5uAEQZ|*a6rfJgGYgd$Nm711q*{($Hys;f<+Ma0WYkL^C{=7EUf8l{Ik?TB37oIvHQ-xxe7HtjQ0b~mxD189V9|$}HRF`QI(dI^p^m44OLV*mT&CmC zz{7Q1tyY{eLdW)6!8m2KE@3bf#_4z#_(2`N0xs9_aqz=Bu2UNmi;n%^X*v#or|Wor z5D8D{5_W-~)bVNX933~R6Q@+@xFdKWI3Gbor|yy9k5V1@{~A97{unHR_HFRzU=ifO z^GNs>31Spj>musGV%T*D{{j|^&4b`S!D1M#04psbC3}{_1PO(Jf zL8T88Qjj1lngVVO7OUNQumddSg^$5q!D2@flNhJm4HgEr0T+XX0fWG$;P5;E9tqY~ z*C4jYNO%|tV#Dwy_(>htNQzUQ0SklN;H_ZMq9X7PoqP^>FIX(!JHQ`-#Z34u_**dZ zAYK2H>c=VnMS_?b+kr2G#mqPyoY*qbr;ETzV9^D8z)f^~7HkEJE=_I_r(}Xf1G<1c zoZ0$6774c?L0G&D+y^XNxF6hC$G?L6gN4UhG=z(F@}A%_urOc}c$`ju4S1TSudV-w zk?@$VfXm<+U=hWcjpCHY!D3$M53T@@Q+~O(E#`yWwHLxN5aoK zg@LgbG(1YMIuxRlL@Vz?y_rc@9BB=iWPX~*jZk-aRkQ=f73zzgk!ZT11 zJO%umj@N^i>G)&t^E!@c8mFw#aU1X|u!xyK;7vOD4Dd@gV*M8`+Jc0wP!KNq68t(? zw6KO6r&NK3%iZ9;U@@^2fj`jk9Pm-FXwVMu=Q{ot{6$cgkYtThz5EKX^q<1XN!6A7Y)W0Bwj3yYV5Jv!bG_UZUn za9c2SAzgf0GzVu!^7jO{*YPB9zK+*4$NJw13BuyTQ0N90eRdgq2UzToGE*_}=nCi$ zzEh_^4O|2kU9t&$pHBZX@CdM|uUd;BqEwe)Z-Mn4EGirfei$seWEOZ9Sd4;Kz>C1b zgU7*(!NP-eTE;0$bnFK|tK&cr2}^Ye^TEr(!hl`i6*@i*Uaiw_bYq;d7A#i3j^Ir? z9tqwG7BTY-_;s)_IQTXas&onG!FzOUZ55}yq2uo0H^HKX4}#wY3xijH_v!e3@BwfY zYNRpp2Y7aNc+>@z)~(}|`H=*r4|p+HOdM0d>%e0DUk~017VH1V;KN|ir!i@9%BMPR z1O5^$JTwS=GR#>2XCUFfNC?jZ;Bz|u68tMz1XYdnIOU2??gq!@MDiDb6TqUvIpBIa z-T`h5X64cO?^`4^7YX2`49wMF(V}+XTpbSwyTGD?Mc|utya(I~EE;qce5;O=GvkyV zU|K#~|GOaJ4kQSdj|G>4#az7%JdtN$=L6s=I{p>>7+9i9DFRUKz$BWQKpAG{YVhUGNy5wP&kCh%uq(S@IZPcY`|f3+OM zfG&d_{4-b#o5A4AI{7Sce49uGuYhZTMGKFE8|k=C8+0*Pl;;O$QMp+E14wWoLG;;t zuwTc!!0o|e6r2X%0Tx}NLGVA0}^;1N0=34TDw&ww8S2StXrkuVJjq6O!{PwCj2 zhnWs6Hj&-ID|P%J_$9Ci+7;kebo@T}HL$4f5AYjpu>OmL);1iWKtXt*5BQ*tr+_~M zi#}ct{u(SMo{zyNbR1*HHXAGqY6JeSjt7Cyx54@^=Jpv#_!|mhx!eM-n;WtCOK>9{ z*KpwS94snugInsj2%MqgIpAC!?*O}kNDwXh776)aajKQ%j8g`HMW43=-v<_5FdRG) zEDT-*ejF^Kd=Ge@j?aRZfJJ%9F0B6>kszkhE=bs;frSTt z1z*x}3wN9nn-}q5PjC$#PjX}ZPeg*4c-BCnrB2~6I1?-?ybN~gIMagz2e6oU`h$Cc z#i*DDE&_{~+5|4s@n;^a|Mw$7w4j<7r&c<)gC~N8O9z9e>Ub7-7FYz~E8y8WJ`SD- z76#PuVP@2^KZt~9kRS{QfS=d#eDE4whF#zdIzA142`olYBY&K-O~)OEFV z9DD`|`*jI#gFn#mdGN{@l)9sCVgc<4d!86B?x|Ekk}AABjoLFEr5#MvT! z-1_D?rH+pKfSZ7Y0aL)ubi5wi8Z1W9$6z~HOtmp>u_@JY8}O}R#`-@933uoUm;oLF z7Q<`{_3G1l|M|9-0H*CYY}OJCN`?5=0Pv3w}e# zN$s)40t*kc10T@waPWsZUIhMJ$9urX!NP#E;2$`%^*^}-&Ula@T-F7A1uTZ$Sa5

1sE~Kqrvv@ABs~oaYVj{~*QSJIX z6J{Mn&*4F1K5oD|_ED{o4#OzKZ;8;29gGMQk@d4gY0i@Deqgfr;Y8JT-{=&-brJDz=BkQe`zC3#a>a;^>+imgdL@(Z(zZ=aiJ13x zk-M~4{OK5MMNO3#FG2u&0R#bTJLXP@BrwqK448t3bp}C1XVfpnENrYJ2_m+Mupg&9By|-amSg(Fh;HGZ6O>EYeMUcaAFdq z6N5#pa0=E3!LcW(Ba%Rm8d8?&SVH4XXzmJ^GFI>Ts3D$xtuE%*B8a&~WaO~E*54R4 zMEe+<=-l5yB{6qW&+}1F=^4D0uv>cX`KWZ4pDvt_N=rx*2oCtytm~Y8y*E zFGPj(UhrPsOTa%IwqKT?zgCHM=L4&BiBgT z%`u@T-_B88sb>qWXL2mBI1z*|Qiti0f)Pa^7%F-BUu~F8i3I^zE||e}+*x(^VR*p7 zav>B0{zM)3CI@BD(;Qpe6JwYlJ;0MCklk+f{o*R}< zQSt6m&SDe8z~RNlgrx_(3GPNNOt`LX=uW`2Ow5i1cH{c+Y||RL4_%(rxBu(@qe|2Z z4C9D~dAY8Td{1==?QZ3cYm~)blT)VUC2v(cE|+VPsbG#R9$5TQWYEQjQY=42Zfm#r z=xvCilN?2}d79;Qq~-E7^GiqCZjrBpKr|~uWVp5eo}$oR#PCfKtcjF9$* zBTX=C&T*tk8h_7nB$|S7Ek|0m;P#{=O(JaPNXruWW;@bE<&^!7v}B%7dC^XzL2cYg z@;PY3=g3zg@Zoh(wA8EuQRti_L#ar6&5jI+!p z4p^y>Mwuf`t(sP$7?bZ^&$-Q1#enC zh32<&*H7D6uUj!^{PX$z*Arbn#-o+GJbJcLsLu}0DE>p0ZQW@%Zv4Jx-t205O-D;f z9w$6pvu@j;C9|D7Y1YyFnm8dq2YqE#%|@7k86=+xhYPwl$$GOVG3%=mv}~XvTP9CA zV7dTqN4yBkq!sP&md}Ne|FtcQTfn&D(Ty-+;JiN<#+1}QB;&swt;$tkPHkv z2B)nW<9YKXY{FrWW>kZ1&lkMiSoBRzK|ugcK`pE)s0p}|3JvNMlu1^GJIR$v2Qu8v zX6<`gR6#Fq$oKyF9=Vv%i{q6NBL*$ z@{PD#h6y1$i4EtSW|rUgiJhS_dKS-s&JdQt@7rm^o7iwDR5%0vAc3a5y-*&VA{;(p zxm~^)R~o?Y4~OG@H2<@9hGZMTjA{%Vvf<4=xDyo!?hQv!=%4VM4NtKN-0g(>SJ-f` zjelAgd=^AJp~TM6f(J%G;LcD6E+W70R~w#cGjK-;E}Lkj4Nv3Rh4QyM;YF)#cuN^> zH714N{@VqCGj@hnHh~GD41$3Fc^iI(O(4e!Kf2n6r-S%7Cv3u68%AS0xf5m$d%^x} zgLwL_&aC^^*|4^V6`&s0XeXSlx8d!e)sT~QvlG5C2yZXzX^n8g*Syqi7PoVHc?R!l zKrk%S(xRS6U$zN!u;D|T2vT3M;kcxWH3 ziZ+CTRD6dw6LG8CFs`S8B({|2+-<6 z%V0Oc;b(&I8|?OiT?&WC?Xb&3tGGF^VEDq}Gs*yO!Mni#{w@nLz_NyCSo6M(fS&2b z8~jGJ6wj9E%(m|XI~%mz;P3<|JZ@JI&0jz>s~nw$n@`K*%$E9*ooz4=>jGZS3Evom zqcd{*Ze8w#7kzA(A8MDs%n47G;|m%by!d@ELnKoHsb^RWg@AlruxoJ{!R(z+6sP+!rX(ILgw4 z=(51!@_D&$+WWMG%^3J4?++nYKmhapXFI2O@l&btnFMV6DOvCgo?8xcAp{J^s^Bs; znkB56(|s(d@=7G1jybnP>BrT7@RovJiDcz_yADMT7frHq)ULw`-aujHcm<=52p4He zoF?73t`7={eY-@>Jd(+Pz(0} zv#OC(DulO~7U!0E*D{;6v68i1=~+tF4$zVI?&gsc5X|)0_-D-~ zgeEvN#(XpAuU;_xY;#v=FPKJ4);G- zx3k;*_I!N?z}^o_PJMSe!W9CR_n?qkyRwrtrIuSIwOBqpS&sx;f{u4#se#n% z+{;wD_eu9P@(40sly#FkwRN`G9@Pd{FsV5WQWH669&O(`4}Tc}a{#fhDe@@kR65R` z6u&Q9!t6y)32R9eVn7)7+;+EW4vpaS3h1VNGP|qD>x{fI>LFg)9d5Gl-2Qc$i|o%`%7a z^93Q;1uB^DZb~W3f-D<3^ytzDM`H1(XjtrWlYg%E$^p!nmykRpb=!Pk{VUCe!W zFzX`XH}@2;LRD^fJy;c-nJK-&jUy!=Q1;928B*rP)|xVpM9F%WO8dJXrbAB!bp?A@ z&OIL#yizI!A7pk7*4VgkD=|+FGHd;ZN^f!sz6!RUvZuS7(KD+dSJ_N2kmUon#!4#a z$JJy_P`=7CPRpq#k?5I3C0Xt_B|38r;wH%U zo}uo>Dh@Xm4CP{dNHY4}5O?Er>zInj49(;Ug>0T{J|ZyNVYQ&5@L<+r4(aWEK%i-ozrG za;2zH!&D~olyQ?$jcKgG8>ie~+kCd7`8$H*uu`2(b`&?aa|N@Fk>msiCn7YNgeA)+ zODjWn5Ght;yWJ9~q|AM%ErH8xwp%1pI73{z#{D!s@|ru@7BQX>9)P|p>v|q_RdX5! zyTh;-9DP^P|BFgq3N{|hYIx&WXQk<^J21#CObz!d)X}Sr`Y%1skXHDQP20?%{xh)p9yK#8CDBZpTwy3wS@bFApmU_W-~=zV>cDN z4+|y>enbWT4YFyxPZitTNlm*vC`z$j827O@u44zxJZMFQc=dIXG@qMx25YKd$$qE1 zxy{v^v}L=yOnz7|Q@`Qv)~V~As!;ZtWGYMcUcra;!o^hq=UYYZUF8drgpJ`{*uZ9@ z5$=1hSW;67A`vlhYhjlAUDfn++mfDU&2cg|EFc-P&5B^mG$S%*@Lp;@A{o2w6)+}J ztOvOf#PtTkJWLN6n1uEcJhdjH)rg9G#uRB~B$_caeJZ3lT6D+Qpnd7G((bZSiZbiX zwB_5NidJ=12^&toPIY&}Q!~P{$h3j9`*v6s1&@ex%Q9!GyU7*TaXL<$5{Z_D3%0mT zk%+qTLjPz}L_V{VsKmu=ipXPhkTyjk_EN$3uqhIf>};Ea9V6HjiL8-q zuPNg(4B%;us-`mQ$)-Ag9Hv#$imBODk?2`EnG>K>)?Zc~4a%=9T?3;pOwLW!nd*&6%ZK)g#1by?9 zi*t+pLRkwja*2%A&M-!m?UK=t2M5J!yi;~zevwJH{wInc` z&TVx!(KE!*K8uoJWQ7MFW|}2zCS`2{TjE1`P?}~5x%VGU^KN09J<>Gaw;kq4qL@re zw!<`w4|4)H&GYE(kKNbVDI;n6PtXDZwuXtW8L}@E)=K+gdxR3jkcjq0!m{YspMty_ z1ErObkiKNx&Ha}?ww3t_+8}B6X{5BDJ>Syl8c5~ICy`Q;pUPe6I`7+hn z3vXBuG0)Miy}^dWzQSMkx}TOJR4O@nA&my9QF&|J!I7VPbReB=lQw^*E&JThN^}Nx zqkZnqtS?-;F#fEsY4hjq`>9i3Od6yF_E5&?po$ouI1L4}q@l=__E#48D59Z|u>VT? z`{%5ng5n;^*!$h1U6!;H&)pK#4CBq3b|MlvYZJE9=SZkttmv?AUF~3vP_D$L{4^-x#h4PiD)?_>>+MB;_2jah*qTFttsKzNiYun z{ex#`afLJLQ^~Wie6sXJ&X03W9Em4oe3(%YC2^Vj-q~r{y#wk?0xSxfyw8pfC*o zXh0+jJf0GTNkQZZkjP_QAq_~QaqfEDQ*TSRKaBdA8ysN|5yM*cUa$#q^h(6A z1XAURum+FUOU2mGu6nD(nC!Gd)J!UPG&s`73a8^K4{D<90!qe6}FX zxGZp2#I7k}cgU_;o(qO0#z}Ix7a!I**-hog7|OjHMn!xmBRFAaKaE7(94d!o1G#;*yh`Y%MlZ13}4sCI7Nc(F~1!V#3kB>05kg)a?dmJ8n zr_E3>iLnh;Ear36G&!~*%#>h@p;^tbEfPI!nHOW5Kxf9%!F9nFv@Szk!}{%n<+3}3 zb8FU)*c~LYXc?|(SHvemO!fo`xgdMOc|g*Qvz&~x-$o*ZLkQ>uBG%YjwSJHjAt{9K zonk%nsT8YiU_>74$UlhnTj?>>eeJG{(toBzm}ECE1Ga7i0^5h+s>3m9urHjqgQrUmwDU=?IT* zO61S*$Vjk1E_DiN#;a0Dc6>w@D89Imj6%uHvEe~(aHv3VV=dtEkvpZ@nIhWZlusm5 z3L+k%P?=%}GNyllP?`9!xb;wTLSgQGA4uIZR1rE9dCa>ahPfr|4iV-~+7D(WLfkRW zr(fbjxs6Z1#?WJ5ptpz=V^mEgj6@T+#b6Hhrj4^dJ+KnNj(+s=O1Bq#^dd#wCHmfA z=PK8=VLaf;C&9yStKfQcqz2EsTe{lIX!@-GxO=OnSL%%9KA9R0LK{nDO(W`zfSDrr z(2N#Bsca?_$b5wdqA}ugossxr=z**dzG$g468SmVu_U%?5r#E*K$FiV?T#f2;K9xa z_DaHjrP9%`S8pE;a${CXZg79Mh~JA)h@=%ExDbgRE~SIwysIkvsPP%}DM@G#^*a-+ zkM#-Vp0WEB_r+u7@GUYbh(xY%W2NYfJJA-!2ekW)`z9L?p2Fd)Pmlf<)EiuOwEVXq zX7ep+f@A~X_HI6D5qPbaoW0A>AIyWK>`9BP;foiSl)08ms*BCiD!a*^l|m8|7D=Y4 zrcsYX3Y}G$0a3`97p6((T$(yDSRZ9hL`@Qh#|`W{p9qe`hxssNZH5wAGo%v9#JgzM zB%l%>%2YXw$d7D_T>;UE593zRmFowi-us@GT{&Aei!3mjvR4E{id9V}VOXVD0f$_E z43oo%#5{<%)(Behs=HCT!bj$6!$>4jrcbuvpaAb=S5lwHgN#}TFY;x=AfrX4vJGwb zPmnY_M{Gk0>marL@Z->Skz%!#VpCelh8+Aj?2UwoAfwYvMxuvjf5b|VD1a9l`d8uufd?@Sk{^E;Pl0P@fIC%qG^N^PNWcs{oH0KrA#;yx z&){tL=*zM_4V?1B(ylCkb8ZoqeI*RGVt%Lxd?37KuVi7n=!SePx2cbLlRIEPiOY`M zba{|6EF5mZTf3Mu*+Mfn^8(I^ZX|Y;O`*l#j(pbj)Abk-1xaNsBoj6u&M1?;C_@g2 zk}ceY8DZU5!b&Llbg(kYvvMF35Cf+c`CvGue^5EiCpj&raz>)3JTAv8bfrEnL?8LO zuedebc+}aG;@*~$uavqeZx){!u_sB`gFM#TjJ#*jlO#r5ufQYI;=`OKyOUV_mEg&u zK^%JoA`!JF$nGT3+)V3k4YF(v7n&DZSRMA6>`u0`D+>&b*qtQoCfS`b$Dlij6w8iI ziVwW+Cc2aS@bRd^jP~NgxSA7o_NPe1Ejv0XF?8UC{;@xaeC9t#CnW=Icz^oVX1Yn3 zOq51WnatQ*Qzll!i_64{lQLQL2_^vC|KN+wl4hMSaTvA2#9_K>iX#$T<$^RX5}mL~ z|1J*e7g3>$&EBNQDnsVw8k^bgDEh6So|uP#B5YDrv`Y5FaMi|R^pUo|NLIg+lcMyG zxJ!$fj9aKA zA5$v{8CH|gh@=LGGnz>i_l6kl?G$U#$CA+kX_qCVy&{TL!mi=_ak@xGxk2J4S@PCJ ziuJ}B&;*fUwXMl*Bzi{cFm8=zboP%Rw`OA}x2g7uq3z)aDu{kYnte!Ef}F7y{|V(4 zDW)fkW$QAE{VOP2Q>)2sBzg)iiQ)5WflfIqX8@8KY*4t$&e$wvYtH~=fzub~R;iTS zZmSG(Yy1?(t$9oeSj+_^L0F>d8=fK&wGM`{j5FP0NmjD+aW$5=N|sB*)WQ1j;w)no z7F#B4bx_K}xW!}BVtOZ*WF;-(0Xc2ij0p5_pKO(YafgDi2?B!!4=7x~Y>VX9wh1DS zx%%SVVgXicCOdr}oC=BY*)W!ITCi$HD!~Oc1ssW}@q`Rz4E(~Ksv2|TW<5*v0Nfx5xoU+7(P%!8&5|obvcQmtD?}2OC0B^<`EQVA6K)XS`y;`9 z#R?H=9|D{$)`O1AAoCogv=@0yEZ0`|mAgb>L+L^1c4DLC?jJDf8EwgZ!kw;~>9~l@ zoz_liB_v-bm2Xvw%WDz7RVgecAP5?%a*$hgf)B~K5s7a`m5|0^;Q*0>wbl7Qy3Fd}Gn5F1McV(XBcU`VYfEUGu)=+n!)ZPQJRht{PtmU0r-b zsNu2B!Xs{y)JI{H43VOg*JL{qO>?`PWQZ-MlG6Zf85t7y8&0b*;T@^4Mpzd!UyEoJ zB(e>16U^wFgW|Scl2$=-xmFIq;=_8bra_2A50{gOkh&;j6iDw;QhVH~92@QB;!0_8 zWr2kkR}N#oRMqF+3QAe=OXVo#_69K<;g1OyQluyk)Rb~Hq9PxzuQNWzj#G)|cG~Y9U+DZ5y;}jLlI(-2zv2C|2PK_`K)V1eJ(Z!kPP(XbAUH!_xmn4Eq?&6nM`g= zdmli^QQ}E2eh?cY#eaiao2VScSDSB)%zH7kJ%aDduy@Gej!KCnm4-fuK~o}WP6ZF5 zkBASYG5z#lP##JmHGarFLqc#N=+cJ}X_IB@lJ$`L>HhKqTia1tau; zYz6{etXO6D(|naD2NI&#>&W~l?Q-MWN23{g61jiGkIMWsQxmDRb)@>}8UEv^*3lx* z+tG|vRzO2*vB!{ls1|FFl9$J@-|?f@W`E%)st!AipWo{saU-3&j19uqwRHvTs>|6` z_`3gck>!q9@iVrb_!&}P{PgvRpQ{?M?Z|nd0UM2<(Q)iY{Pc|%Kb;cTVSFVt6kkz^ ztPpjkrHO1XQh!WjLwKc)BsPjydU=vaK9$6N7c zs*h&zA3uG@f6Az3Q=X@QW;R70f8dj*EYIbdKtqz*y~y-_GFzdtRW!LdyT?^T2b#0z z)h=tuOkww_>;*cT!nv?$sF&RbX?*Av1e&#A?*a3n7HkD4m&)!}ySzzfQ$b(?^-lxv z4ApMQo_Fn|4J}2UL9N8kDgLvDp1gv6h=QZjAqQL&)f$}4px5!EvS+DP8@4SGFKMjh z=c*=tz<)i_+K2ocHqK#DR9n`Xo@>kM+*tOO^H5xdBJX!CddDvNo-CXBlK76!d|8}} z(o5u_xC{mpqU^;9B5^2=T6JI@Ia3{2qgw24e)tGyX=zpmmJm~RkNnhd8D0k#AH!zY z-}jM)?^^8sVD>{IyF47KYY!K9WJ#(vlNxtqO=oG3;D8ej=9)N~oF8_#1$$JM&YUF= z?wUB7Y{S=xdlO7i54{}c!T4Eq6GxN7;bn6qT*DbOexZShqsifL<`?i;dS|ZQlnK<2NK^ypOF}&4`3l!UyHK6DW7LO)tmcbI*`ETb^#4+J1 zLYmQ;cZl!k%&Gi70%%THt6OU+yB%xZT3pBAyGs__G))%NaEDGV3Sj0SuBQ$-Pr?>*x0a@s0Nt|h%+1)0XkJfh3miABs1zTs^v9z>dB@(W!lJNXh z;tZyaQ7=RfcXonadS=-RP8vp#M!b!~vT3Xp-_e`4Ld8@M?65fZDTVbUnc$t;q0gYx zJ}HFtye!{!jkCP=g5;$%OjvN;Lgi~PRA~#t|B6JIS?WZ%_EmADR?iM+Xf{Wfp3cZw zIn&1FTOx6l7umRqX;BxJly2}VpQ;Y9a`n>6-gcaI^fG=dF`IU`VM%GMyk^5@Ksa{8 zCX4=$xH=b3-FB=_rhj8(hKgQuGL-*@I8Yj$`LV2AhLn~-XicS(-dY11(3vI8%KwkI z%~r*u%~rkX{I^o^w%V$QT50#a>`k-(M`ykyj`cE*D5zd#>m6H?BE_6_{HorSch@|%ov{yyj&3MKuaaj;-_t*%Ougv zXG9J3f^eb}!fP6}w#-#{pXSP;ce=0{a0xnfWyjP;*!J5u?TEE{8A%O0$o+GQVQ_h9L+qqMLGo2P2K0u8QW_eI03EbJ|Y(L=pi zOAKUsA2vyi`+{=&u(T$=&!KkmTFg>mAI9S1;QI37;4*r>k0^0~|E!@XAG-rX=QJO_ ziimvdaJ{M<$wd*(PYW~IG!XeKlX;Q1Szp!&3|!S$Ajs*<9#&Ja)u%5@0@r`_W%ncN zz5Uq7y7d=!rkbAw`d!anQE%UVIH8l9cYtH^H|n_keN_JDov^=;$lu=fZ`618w_U!s zUB0)So_CO|SCxt#4U8SYj;M*wTZ1)z>Qn@eex_RnvFB8!N8sEb_;aeIQpHe~2HsZ; zMvdTf42Ix+-xm*I9qX}Q#HgKL_ACGO%qyebLm+AMR9KlrGDfqy4g8fJw$+X9#HiBE zhk@xijj8TXbl>b@EJnQ0Ih%R3|KY_>&IdM#nZsC0N(~Bs6|z!X4uO2K%hsjj!ECsy z91J7bvUzoCRyH2+(l`fXa_S}x8paxl*B!&DDz#|yaF+h>RR6T8A{JRCoRk_=2k@5x z!l-VbgSWDzIR2oggX|exmrE-~vt|(_dU`mQ=o{gL&SX?wCT#tt{ zTthNO{hTD5YA$aNWk&JMEI!_MG)Pq3-!3)bEh-t!nnsWejpCKWGo$~|1j+>`A#0o@ zbfP991H0HjsQJID932|XMySf9OOUShV@SH9p5~3VbdLn-OLbS4T$*&1e5x1?bvK6m zbFKGRt91`q>mP$utHf)V7ZdMQV<29|2qy%^J3WRg-Z5%3HlpH98;e2~_J>xr2@18$ z=7n%FBRgWD=d)1=IO~i<)qFqF_;GA-l3NaM`N7w3?{<+PEL0!LxD8Xk49dQZtIYR> z%!T3NZkMQ&$im-fABSPVq_MZLgm@nsyLuL@yU3y{sWzIQYvwUJ$vkE=O0Hya3B3R0 z^S2@-GRY2h+eD9Ncrh_CJQF%kcqX$Y&(x|ohk4r8_olrHH(;ew=!VOnJf(QpTsf$U zcM*884#BE6CnJY-!!6rk^uKeWwvuS~IM$Jh$FqhQb~cQMYWj`_q9?Ezmul{(1{2xX zaAR)(zkyx%LX-~$7ENT=xK!*n+ck+TRxP~4F`3-}PxGb8Y)jnELOgPb?DcpA(k{|J zF!OfS)y2#wyiYBnPbRS|sA3Ak6Abex`3|;5mxv#sU3ajBHR$4r8BW(~6v&;*dVua& zdihQW53iLUxs%=4yzFu@j^z957cx_&EIvG2;t^3horc`SS~vH_$ez$ z^~Aw!E0FE_vU7GeHy<-(HX~NtV$4S?Rup5yFN4QnqcQ3VxSzvWI~z`(X>9DMvV8vd zqljRMTHsNFXr}Q?_6z+n5EF(_S$PAqs3>m=e-FlBIdk0ZZo}FrQNE(EAvYY4g4b`S zu{rfQeq74W9Um#BgOr`i;@ep%z!O#Ij^#I7sWowhmqCNC&Sf{#M|ZQkTnEXT&QeqZ zXXox=tz8L}+#x2BgIdt_|I^~=vFWU{iY>z;m&JH4tYy^V*%sp15|X{HvoaM&Kt2T4|?VH`l4&mp*ee8RcwWZ_tvl~_HIjr2nj!He@ zckwRMJJ7HP+0Cl;9F;!E@>SNJ20YBt>9&VhmdZL%$xPOczI%vGR#_(wc}Vr)#(JLk z+rumux;kkltP8u6r{USf;nFO#Yp7%}20wN!6+8lkEu;4zVV&yv4c?}O`K+aA+j%~! z{V1Cxc|~aAQ8pJjy|dt@3HH-y>nyf1_MVl7um_>B8* zd9$jfzhwhtwoJNXHXD&xHprX2@*WQw(VH^+9&anxJ>pppcNra+4S&&3zt3jZqW^ZA z!}{0tUG8l+&ex4ITAK|=?2_FT=O4`xcvE`a8!YT$W#q|YnR@A;a3t{_cXl4TLB$r8 zm-8TJoTNLK$Hqw@ws4Q13!rt9O6Rh{s`&%C{j6hR*{$9-EBkox7KFE5b06j=nS!fY zWi-go8mVPtsURO7+GBp!0xWLugT*pBmTSwfStd~fnoncfsvriab;QMPc+#!DoADx5En zL@i*~Ci)%`oT7tx+pX*q~_%j?DtOuXfxu7e(Qz*8aHKrDeSbfp;C6EMOY{2Zd2whjXm!>XaJ<`h%{DD~z zFf*ahjrVBl0AcuCNtU~nb}wT0hTC0k9T1NfVC6Ep<#D!6#eVYSC)jz__iG^eNw!v1 zSqklZialE2?+rM52Wvwk7qgpnlTTHwcLSRjv$}}hB6lGh6DfE1C2WGst(4H}C9Er0 z7gmiwOCot#0;`$qiGkJR)4ZzmugG1*2G_`MEW&Fc4Qu8%_K;b`zT(W>Qp_HT#LV$x z_O6Oe0qY2LR$iy6OW8Njy#7zK59^gZAyve;ST?qgS}tQloA2~6OL;x!Me&RmvB@oHH0^1#?N2*Xp+%Pg(K&cX&mm2SMN35l7qSrs9%TsXi;H|1Jm0q@~Zq@P}f zRn@b&S}8tS@(TNp{J{ByejC{1t>vNbC3&g6TzD7_I|@3u3)xnvvK4HJA`i=QMYTXw zarb(b;3^C>EM=Ojt}+(A!bP#-a_%wI=2f<-t~D60p`E4-rpi~LyUGAhtv@al&UL#E z$JaVPt#a(CK@gkffoYda?B734PZkMb=cRA&*XTxfXx>{{G zPsOERr*+`?dcn@`VeI@y=U!qr);IoF_}HJ4ba4zwuQ*59udxwLb{0N;Lp3R);|k2! zpR)HgXpf>%&)4zjlMtNoERBDim8*(MZQfu>DaIKOGhANxYKVIYdKXsc5VW!poc7=p zH)ZW}H!doTj;2L#u+LTVaA5pKHr%CJlW5B(tQnY}Qs)4cYq&cYU`d*R9keKw-N)UE zO8dmPso`e!Om*Xej$J7(pBhfPHnWbZ_2Q;C+3Qi^*|3V(c)9|F9f@OJH?;NnU zv!?vzibFeC8MP^A^*frc<)Alx9nhOW`&fyGC-$ zSv=oGopn=8=i;xl%RD7wOnNcrF?SGwWLOs^pu81jEFmzj94?NE0}#0%FuXGJB)$9r zyGzCH9`nEOQ*QV#94+f9{*kX53#hV>{)b*6R1_Dc@f=-uvF@sM59RJ+t5oG?I+v;Y zWDYBbvOmI5V2-1yef8!t5q`5M_SHwMp=yqzgMD>8H7ioG;0r=rYbmDy9X9YIVTOy zWqV<8u(KZCS(m`Gd)b`o(IajjcZ=#wqwZg@fsHZ*E89F;FME(e29ajr!SpZK?Rtqg z>e-TF_rq1;vyT02F+7a^UtxWy>6fgxo*_n@Av{AnD*h6cF`f&{^*-W;o&)R?S3Tbw z(!!Mmq#-Y((+639;JWr}cre4>r(3=TiPW9+^4BcCiGMry*7(3F!$)QrMx#31bQQ8Q zH0T>Rk~7L^{x`6V6LwJPH|#n@^iF@n_4ET8a0qK;M`^_&ESa(G)UX2X^04jHr-BVm z*}gd8`6wQ~D@uss!+Tx}`Q6))zj=#ka|O#(weO0*WnB_-L>>|Oon+!dN6vu8J`4=_ z7VDtZ6+b9l^LZMXgLaHN!j9-!-03sB79V9NRpZ0rS}@~#DdTz8lCC|5DWjk6KgK%M z_kAIy!@iQzVc*i0W89Ez4lCh-eYHb#!UMB<<|I-6_Za80Rxv&9Q%BIi5>0!QN`7KZ zQ);3QMdyU2H^1P)pqq4|9Mj}7q}sLlf!FS-FiLdz2X<9`@d#!Z3gun0zK@Jz@(H-jf{yVB$3tU(W-U|7sxhpn zA%-hB!xn5t6~p|ssxWE>u9O>v2%H!q|4nFET(9^E5wzRGDp6fr#>r5CM^IO8B4ZUx z5D$h4x*`}NDq$9jwrc)wWEDCDs+d3h16k#OldN^MB>PFQx>aPc<(aEUq&BK^lDARs zFgmpTBzm5I7o9uFIz}pDoI>C6@22^uSQceeB4EsQg2ze_7AoZ`iTxx4Dlz=Ph9g*# zl;}qjIN+oCjNHSLX;39=uNr+R_Y}fMe*2MRJA5QinZtP82Z#KGAK%N)xGRWH)KO$q zvcfVNJ?)I>FOqOoM)QWSjJQ}%l7`f(XT*3?MH;t7@v6je-3_mbc`XKd+HgIKql{nJ z#Bi5cs_kaD%+ZD6F1AcRPu4H&STH}IQONWcax@kb%3qcKGwnXj?yAoYOCwTtR2mWg z&y@8m47K+_46cYMcE!@tKiF1X5$hShQud$hQPtW)6@Rk#=<-$=&0qeNeJTx>l}K~X zFmf%R#=o(X^vz$aIrp5EsMl+)5A(Tghd~M%vO9+%L$InWqk?n%)l1Z#46MKII~;Gj^ukf3dn0^SeZE{uBCUG~jojm$atQ7L>7h-APA&XB+igK33t$ zuadLuRqAz~C3|DV;Djxgv$aAvNI4BQ#zduU)$-DM>D|Oo!Vc5i^Xxm-=uML^z#+gS zW%UKNxGqb z%&3}EwnCN*&#yxa$;f&OE|i4N_~4XxPX0z!%HQoj3wAaCN&aw$CwSZT5FX3GtF5_F zT2t4)z>`s$9;IUB7E=cQAAFR-qQakaT+_N@4oS(n)-j|c>|B6XZyt-H@wzrqHSstM zpK64aYaGqXou;ADk;^TOMmc`1M745RwRpMTX@0H9<#yFVIb~jra&u#Nx!-6@OvG}< zwNcEvw??tewKYB`I#pZi6sdNd>u8yro0)aA;i~Tp?G?YjQk%>8_i36det!!byiBVv z=FF9KwTN@(?8~*LahbI|aj8ltZLJcOrYQl04GQzisqk`ba&>P2y|#oKJo8&>5UXJm zau@0s%USuA3SzYp)w1)>EV5gBit8b_nHK0=PrFIg4emc+V;r`9T&ZX95971IE|2z@ zOEr$r$T;n3y+U-d2k2~^h7iCxo_{ipj7RnQ)uGaO4R?%*a<2xC#B23jda^J8!|7at zhI{t{)TW{KPz(ZXTp#lNIA-1ucq&Dan<+L?yNCCSxry4x5jp{lPtpcZpH^BAbw*t> zTWRnac}cSlRkqS_ikj0huBF&3(6)GLwBHrl@UFhP=w9&mGZ183X`2&P9~}v4$%;3P z|GLm+U8;yXC}P}LOnW&FP^pt1q=HN8W~K+Jm}#^;9XYHCv^QOQR<95>I71J#)^3cN zQP)GWTWL+`SZl3+OTi+ZV{7Zu^7{AEa+bAipHpyE6G4^xoPujBhDNs0I$(($t%&Oh z3)*M{J;EV2nq$atk#vresWOzyG^kZu?Lp}_V>kG^w%Qf8UGmcYwp!Q!Z`CWgO|$w_ zpLW{S5|Mc{Fu$Gll&igDtDZM`f#Ox4=CdShSP-nfi)r%WP+g>1JV$LhqV^Lqw8!m+ z!bMFTvBRKg2kqMSLLP=6k6vm~10aw3>1}hG_UskHA>^U(<6;`FS@u$HC(TP6I%s`0 zT0oVImpGC2;rNHNEa0u6ObVfHn4XZ+xTn{N+IpHMcM6FbPnCDl9;%Nf z)3Ov8Z(If|4g+Kb+H}^^T`>}Xc*6%&(LuvBFr6Og0zr#hW_McGMe7mDH1;p5(@MiD z$w}HZoU_U#?QY4G)i$pU>dV`IY0re5*#3O?t5(R{UnswsP4gRR&09;fm*c&p)SUR* zNz&FwR$+SM3hfH|yODN>MmPz3GL{r{a0lkD(I%gi#OUil@90@=n|r8N?n|a(;G*7TrPbQS}ic3hxRVQ z()Fp%)!J~xC33FD>)*auntwIwhvZ#XYxl(X&wzLj#X z;S>|7=e67=$PiPFL^(Y^eXWMoA`i7O;0^d1+bEjxUwAEPlxuKzpmBJSmc3BKpFr8Y zA{SZROB)l;O`Yo?b&wc&9mYzOE4|LiZJXYX{DCFCwHJ5yA&i0$*%2*sW?6ONqF z*~jS?pZ1+rl0z2%T(iTnm+)(hH@8e8K8}7XH13;oq+x~Kz{6x#mcV8Z%sr@ z7jMT{d}B_cOfx4?pMj{InH^X%P{XFJ;2Lz@sMKCI9qZdbY?hX;s!BZd9ITDzd17JE zduejln2^?HdU>#x*3qm3&pauwMXw}ptJ%>x(VCi*sZ9wkqK3-3HSB*9;(CqTL$s8R zhMt#-{7*17D$SLYQy1k1XyY$l&iD_F90Hz97tI}l5yAYMb_~(JNjFcSH?%8cuI{LJ zElI;T30b5<7VWCil%HwWP_1`cQ5B3&I5`olu33QA!$VM6DsM@!g_T-S#bbeHKUy)w07~vTS43&e&vMB{3g{Isa@C3dc)hQLw|32um0XP&HD%IQ>8kXd1(rh zPjV`wY34|6Pm;CThIb8!{^q}u|9a;6ucOH~YbUXvZNw<8wd(6kb4O_>)s3A4(?@H+ zp?QV`rjF4*#xj3b>Y1(0CwJFci3z>MO6lT+!=kGWmcMzUDR!KeUROC+BhcDRZk(aQ zxxZfUEU2X%e$IUk@>AsW#(0H?YFp6E_N?9@&Yiz3)4358I~GOyn%>>GSFLsJ!+)_W z-6y`IwM^_-#CGvgMQoE)#CD`7uw&6h1>>~lojQrx&`ina_SQDvUARaJHGgl9mRvP+ zI?d~}{WP5&r=_^csnKm(qs&d6y=hw&Ni(yP+$)+3TG%V<=luH4NxnYsDEZ0k%y*i5 z^enkoRPbXJ(#+emR4KctVq0cD`5To*71>(T`n`kc*V*X<$=qElk$UB5>#NTS5RK0g z>b@%A9n2CGIiHN2NQ-fqgeSCUu&0^O%;F)kcn=siPw zU!5>2Q0G20gvxFRWZbWfajCxkfr1CLd>3Z52@h$X@c8%l4{P_=E9x&b+jpbX>@u1* zQ)@`g9?@E+&&%<)`4&5mXS==W{5RI+ZS}3%EdU+T``+eF3;iEQxsPZmvof>2Z9Y}J z>HNtbv|%f>v(UeNqxi-j`QJB|>!>$nE1m<&we_IvYpDmn-E8a17^x2vM|m^@w7AaT zIUo`4GhGn88v({W@>S>d|22QZw_JeGXG5m(?R0*i>gwR}^$LHr&ahl1v4-D1k_ke|M(f$n*l3L|xl zdiwd;_btu!bHn{L?eJ?SR0}VZUpPebDfcODQUv=UxVN@bO674f24k*%c@Ksu*{fMvS#o7>LsVvqu)Ow;@Id7iKC$UTq_fjmL z^qxWoNo!hn`_iaXhP^dh52CsXYj(L*it9w%YucmKVyV^|;l!+^XanpyC|QcOQ&!4_ zt9PE(uyD0hE?f;DG04=jNlCe&k$GOIN~EmvOKA5xt#z%H^0Ry;xnI=0SK=s2 zrGoCr?SU)dbuqlUB>9cc!-jC15eCb&CTH_r31nSG(eDk;ktC#us7~$3yhO!$~dMS(tz3 zLQXtUO7)b+bT9C#&UPVI7d@UVS|+U^hT+c663?w;bPhO52`5D+SRvQIdy8Op2RB@ zQEj*H6H0znOG;9n_0;+RI|<+vHLWF`qGVpq!UnxJSsOB6)yCG74m5TyQpI^5GFgKS z5L)55osx|*ERz&qZ-gNCrHG%KVmV6_+m|@23`?x|g-r;EGV|CLdzBCC2V$+RJav)vA11gkEV+6OrE>wTS@T_3d_{OV)-C3sQbI3dX=axPKD;-1 z^)BkU8LowiW36ay0k`xZFIXe}#Nlv>HP^f+xC4}Edp+?9g~AKlCx4?3(U#5Hh$g$d ztJp4Y3EP!ZUsHt`nQyn00sDe7-qaG}b`|>lsIH5;Xl6SQ9`u+p_8~cR65$W@MhiLaZT2s|mL6z^onK6>7 z)w|G|oz(ALBpXd=^1E8s81}8q?mtTF-qq4OZvWdJ+0S{~)f4aL3AFyQzu-ZteBOdF z6@$A=6-GcSKT*6#Z=!Qs%KsnKn~?84Ej7vCoaYZ5O@pWD=V!K58_x-f-KRIFHSfVh z`cD;GV6DtfyV=sNRLg#)*zHIxN8;KoCbabf5^z8(tTQEn){J)@X|h|UDJ|%h zPcf$l=7LXAL8S?m?9qCp8;Lc`D-COwx6ojFLgmxwu|43-x?Cbr>eNJH#neQC3AFpO zFeGC>0}@0Nz)1ov{0!b-u;S`oUh%WM;e6zgu0_<>Ap^#vTpAjv1b;D~X}@)ugycx4N?hxin|O03pfRQUxD zE5Aw6`?VBau+4t1E3eb!{n{^T{*`pgm)bV9tPS50^^lt1g_eJ%jY^-_IpPH5eLev8 z?Ib23@_$E4KA@!x&g@WQ0>Uklzbr%e{qleND!)H$0>XU~t-P%;Dbbnj_%D2v_O#>x zOq9QCHll~@;mfYKKVPWZBmUt zDEbHwIsQi7k3f3LuXM{1?Uxwqh#2CryPifKIGmcJjXo-NqeO8sZ#+2lI34d<>+_-GL>?VAECJQs0A?6`$Y(r7^G|?~u`qD_ zgywZYFm-;?iet=aj-71S{(%|sPTKJ^FEfhH{;bWy=L07>szLm-9ql;@%UfoU^%{(L zms1ek&OpT}?Qj%+cbwL6w!-?M_>A@;%I!LXa>iG5_KY?HpIN`*6KXy4H}Scbe_9_D z|E~21aKP`}vB8rizl)-`oJDPvR|AXAYID#w3j(o!!tNkn&vROOl5wv$xkGJlO0U}9 z7QJd?acEIUEGCC5)12@XRq!2vtJV~%Jf|f9UG(4hG$&H$zqJ59fBIW{MaAZd<>$Fm z-=BUuuO;#QvC$V06*jJ>ofovPRI`22YJG}owF<<#^fYi6Pu*30j*3|F7FEAX#Sq>m zO20?7E>KC7-Z9>UgY+#!%h$m)R;5y5>HebQQ92szEH!lNm|vYC!>vO+r)jENAFkqM znH_HZ8r8oo;AZ+=*q^wErfd3tRSThY9mM?GXot?Z*hCr8`gJ_x^k{t|rj?5V2V?Ym z&h1cVqp|n6jbV^}$N?Ei}D}o?qX8t8j(#ec2*?o^Kr0X{uxJ%)zWxzk=>; zs&`R+h z^|n|I6Dos~Rjr|+#zSS3=+j1D@9Joc z@~~dK31NgSyMTGKx81nQylpyMhEc1ovmie!&`!TD-5df!f{3`^M-VawqY>gf4qVuY zwy2%HRy8xJb9>o!rnlD@3o%7^Kp%^@umZo8vxcVQ(*<5FlLh*8g1*NqM<6?}roiWg z>|}ku3*>gu*P@H>3^eSf^MU2HKyG(E2gZ)}UWEp+rU$Zm>JKrMO$_Yn#e0u}?kvmv|MW&m&d z=`?ZxMC{*IJP;bBjH5*Z^^|yPjK|NLy%%JQPM0m@dMoW12xAD{ffwbdBZoj694imUykba&IPpxi3MJz9_Zv?;4%;h)f?a=w4CvFU&hP(z^P_k-M z#bB6Q(;XN(L|0w$#;+LdL8hJ?qrJ@zx2r?Zjjf*oyNB{-QuYRJ87?g#9UsB_&Kn-q z2gYr7FQLx@HFuCk>S-OVQYcOq)VCX8F?Izvc+)y`@wRB*1*+Sn8cY8nYowkYue@aA zgw;YHk?g*>>1LRUcxx$WB}29A%XKLsG@=%x^t5=T2(;n=4=-1Uot%&fE?8SSO79VG zF5hXKKd(C2fou>MuF`#JqB)&FAg zg{a1~ZiRkh{j$|I!!OtjuM0$%=+n5~Kd=&IX1q!zE1`h6;_l!|cvsv*Tm`$yP1P!- z=WnCN&+El8{%u$sL7$7op@8T02DJNmy*6+hd>%@T_wKX`el1c|$Obo9jr5~0VQ!4Q z6d1r_d9x^IXuxW{5sFRbV77sG%PO#Sib__?zHo50eu8(=oojSHSK3aKU(hoLTX^K8 z0h+lN?+l2?iKc!>+7=7#hOtnj8JJjhfayhA6>S{T8HzcL3+XuUBl1~q7OxZZ0zKF1 z6QQ>&X!VQee2^~)rv*l>hk#fm~Dqq*fa+8#`3C<8sD9zo30mS$)aD0__6R&OhOr_1j`=GzBz<0eH!OIwNvrObD!~B=7f(pv?_;}+GH|}Vi zI`YX3(PH1wmNJy#^Vl-|d7xTe&WEm#XlJ=T!gY$0-$xGzrkU^S-vc^+r{1#O|HR5Z z?>n;9OKJH|&`0OnyHodY9XtL3vQ?rhyTTNKDEYr48;$(0zP_%x0GpaF3w8h457EE< z6FpifKhwLourcNny&J@n`?a1zpMRz|YIc;5R?NHv48!+=RL&)2 z{G4Yj;28rG__*k+#YN9m8RH_FW}n`de*erN>=fFBD0yOoOTgasb7V}vgp8Yb#)TJU zqw;gTZ(_eoz*GDM@JzjgjPd)CvFRmbEan-ny@ZVMUm|0}OUPJ^j5N=wz$p~}6;kQ@ zYLYHSYGVIOKpKAl8QWe$#^M7|>puUQv3KH(f6hbZLA`h4e4goInv+KA*HGl4VT#;4 zG2>s*R(=iBH7Hob{02l2PWwlza0q#x`DaGv9D;a8|1%z{;E2ZlOQ!4!y*J&zx2m0} zq5>Ru3v!(MEs)H;C^yy-Sg&8cMOz2H3d5209ZHS-7t*`G1EGicB25?DKZkMn7RDj} zFz}7|!HF-0v?HkWgnvN_%0R$#7XK5|eG|J}3ZjWef#~1rAxIuO3e~6^Cbbm0?-&X{ za4BSd<2gHAO3wSfN6zamCFgJ72Q93BHqReXt22(n5VgD%be|sw;U_MNDE0>!*1-Pi zO}6O=NG0AOmCO@J8t6#+`~+|(UJ4h(e?-pIi*ix$Be>{RgNv>|L7%?gQ-e7qCl0<8 zvR!{h&S{sDa}#n>w=b%b>Ut8DzT8pi@{_=M>!sk#JcXRN7UrLf1_>oB=Q%x>k~6as zIioKnXL+SQ%ylNv_<#C5ojW&tMY-&(emi%>;P$=7e`8(ISI}jDV!G_#N|hI|Fzx?S z|2qWv&tGAX)N^5wfq#cV%Kp~>XJbvHZ_ewBYy|CS*#&(lPzQjzsR*lr;2fJ)N??=g z|9HC=u&AoFy=R=k*?W%$auF1DxTq+osHmi*Q-M)YQBl!}3KR;9loXAMnyJ93sGkD; zsHm{0>_kO{XQ+cU78n|JP^rkUgNbED9rRF#O5uOk-ZRW%(nLk)c|O*DzjgU;>$a~L z5^_k!Fu{$gy z43~}9^oQ6RzXABqmbD2!o&2eks+CFyJ;zB9)FbOx4=)TFFS}hzrSh zmSNJEf|pA0g;KIB|3vj0<-7u0HgAuDmnh*Z!x(MBiBf3-!m7~b~OylOkpVUTqAMz5{=fMK6T^BT4OUJ z;$2g%ix702-)_N|rTg<10;B&~)eE$0tFUi|7_7yAQ0kf?F40<}C@B)yJd1K8#Y^$e zOl*yj;(FaE`@RzWL&I_DbJVx_~!h9dE#Q_zFD-0`&>AUj~4Ny zQ!3iTrOx{dl+9dezmW=~Mclkg*|+|pKbSmMp7}azjuyB32^DZ5yY2@WP6ycWEwQu3 zF5f=t;BYU3sD!UGN53JMbzodMN z$euT=v4}t7!efP1#6=m8?`?+rMO<@?+fRiLh|{$NUr_A>;tdyF^`(ssg0=cKmf|VQ z4#yK$evXf*__zj+{wMYHm3@ZJ0}o3wiypX4)q3L3l$sAM8~$U<%NOyA+nhs6gKHap zw^bL2eZw@#RQ-^+Q@i+xE&pM0mPU%}Qw!(~Hv1#u1$c*>%0?>t2#~pA=_tKUQAy|PS0Yxk zFXIhUuzo+vW^-k&&)}P>f?Br0kD4pQM>JlPvO(~YlY|EX{V4Gj@p)~*Vd{Pb{ZhcKnZJuSYS3)?tD>yY_|wKJ@nR(1ED5lgUlSkE zYXYe0EsW3URQ$I1v}Ovv!y_)zjG-)+1W{Fuc)li>x@yF+Ubt21sa+um8rAB!sT8Fp7BkuB+; zm}|7=8*H_k#gW?i4cB>No>L|Q<;zBP$yK@`g6nHq zl$B0tLeQ~dOmpwG4Odd49V4zGi8Aft_~{KvN;&2GS>~-ubLyOSx%xpb>&Kjk%c;gL zeh0(Kw}{VUoz|22Los-K!{3xeT#;qo!OG9pZxS5xt|IG)qTl?6WN*E_PccjVR@c*9 zyU3H_X?Cet84V>|-nG>HA+zgh>O?xe;c9jr%B8dL7+3Zh3auCK(l-3fR#7iLrqeD? zr^s#MEbZ1CDIKXt!A%H1{>SAu5nm|VCPr%GGO2SLrj@v56u4c)dmFdniWb6AkVSRd zG4<UqM+&$NS<-`|f2Q zP^Ybe&$7w>F|+D+YGdiTmDKaGh#QvoQbm)9$0_cn_9hXp#@$WPpTGe9J(Tr{xKjJe zz104RxI|jLO7(8RU6k;tc%C-SLdBm#U)+qZVQGWK*7~Vfpc(!Pdazz^rSxX;Aq5n~ z-ACQc;ylc>5j(_yeqO>3@d|B0Ayw?aN{3ITcJ06dRqzn`?*uM*m@;=lOhXY>?G$g& z#yv*HT}(avuSeYbw>`8=`~}@%FIhhmv2FWOz3p-C=VF@H`Y)>dT>P2c051JP{2X7I zvt_l4>otC>OH1^2y#0ZZJoQb-^TT+o*MGNo>Bu?j*hFAs$`{O8M>)I2+2gi(duWD* zOk(%0Fd2kx(Ji&=aVOqWc)_pZycwdyw4+m+(Cb4(OdCA# z2}Tc0IUZ`Wn(k9Ly^~<$3rtI2+8(4}vLuq8%BaWHca3wyclyI={cQut!y(lH($O49}U7nIAOctsyq+_kJ4Zb%hV z+t=cc0r)_O8LgPHU1x9o+qbY!$_c@;@icz zKUI9KzoKccc(;4DwNlM4#VWnm*%H2`I8eGk{f!iT^XEqFkM=iW+UINpCn@_dg+kwb zilROH#LKvLD-^5l?5~*G;i|a1LyVLf9#{Onw%`Tw*)QIr#a`LEAFC4@+>ha{e~CQ5 zMZX0*`&$fA;Emskvyt8QtvH_jCz!+EVujpBiQkFr4pr87;`pP*wER19%t(DPdxOCd zfQ?lD9h*O@sQWvN(}G|MJ0RW|w2R$G#yf)26>1%BjKZpzQN>>B5|0qt?#?|8yI&qiRwx##$C2xF-mkk1} z=MB`=DK3D`5kEnA!){9WNxTkl<4@w(Yz)B0kV%g_?F_|0#b#Us12m4I#f^cQpJ98$ z2Xx?PF$6bEjQp`V=lpPc&O)t1u-KXO8$F6*NBQPZR zaqJ3$Fi8XrV^z^aquK;MP1bo3^H|(=iaErlM{K|kiGC9Df5kW&zI8iU53%{}BdR|n zPM=lK#LUOcfqTR(O%zzU67ANH)t6M(?pEp4Ld2(Tk<=vU@PvWVK!8qiwR*Dq&vSE z_f&s*<<^(89qY}CHy!O$=&xA75XaPCF>}Z5p~7Fq^?qv)54iKhtXR9%gQEV2+1_Im z6|z+CWo!E%>oNjfUtu2`zT`LT(9O@0X^OOf_WdUA)7r12#@{hN2}u7PMSKh zVJxKC$n5K8j#UW#MJ z7{->(E;OZ$TR?$&XKjx`D z-C@yvgR+P^_0rri`g4vROsEj!!Sc^PW`2=}g#FC<)b1f+dR{=D!zEn6ilzAB5~iv+ zTi$R9FY#8ej%c>niVYI(jGHTLWuhc$FO7RoeJ9+$Pl*VdBRtl|<7^Xiiux7e(dR2$ zzaC{C@bI|k&v_60>d3>;kR@D|IfrVD(%-c9Oq=Hj2~UYYNY+RR&tZ?Hx{=cOslpiM zYv-5JOW4;u74-!FrT9Yn(t4et{|>9}Ea@VxJ(d#BlHSz{XOq!WdRS|Yq%u!wyw-l0 zYCT~zyCv-@eK2+1WolPwxV!{kqE^2JXI8F9VWcT0xobxg%*IU994OHnZ1+#BvH?rad!Rvjb_p}AL zV&Ef98l%rv25z-7VqR6^b9IF9z$B0D>wWQ6_K&H^SHedAc53vMESl{U?_URq#5SKHn~QQJCj}Rnuc@E$IT_ z+lJ>UDgZ&%zeqg+(skTcC7W$kgn<4nP}Ugf8c3@jBhC0zsk4+)4cMj`$4dNuM`^@r z=x-!vth5~aHp&i>rqifE={B@z4V2iHt}IY#zbjB;7f(#%6lV0eqv*81zqzV$(whF} zt{AU0XCJTBY#lGL{bJaJKdWnR>{mB?f>O#pL9H`E!oy$=?cOpe&6$E!MS_%qg+WJY z?)m=an$=RKV6{##*W9QODTRFj7nb9VASInnexXu41F4}drp;rb6sFZ$AE(I4(qi`Y z(cH<>b1=m}Ov3rphm;&9T{KGHVAEssu{N%erQQ!VY^Rzq2~U&1Y{O!Ai$){Rzn&UC zi#AV{e6iZ&b5;_2k|H;pO&T9lRk$=q{mz&9ZaNSyZO2oIwwee@c~PNtnuO;+@U80U z(!K22d|cmJVEbY^;)3S~m4(%Ib|m@^+RL0JEm<7btZpta@3OrX_Ez(lPWre{`iBM6 zRo~F8Yz34h!n~bzc(yvSviJvKJIHgkw0_j;oesM`Q|;2X+G=M@zYo(kw6Qa^Kx&>R zd1&?jwzbZap4VxI@3ZB_NO<<%V;^;$BYgt~wJd}mfX$2GFMOWQx=30g75qnOZ*AN` zTjwI_^!gtKt zDQmHsU%FVuh6_|2d4aT+<<~lJy8~y&tNF$8@N3*5TT8t3p+=vE3o>a`ei0lgJW5R$ zVMa=|`ClwuBxxIt*wU|p^4isXw#sWHJUm-4%ocgAv_PY|Wc`f@(j~Uyze#v<%86>P zL+|WI5!Xw*97wzb7o)IK!{z&~bm?qc#*NY#WRW$MwL+Dt(v3)TX%em!=xmv3(#ONb zrIqL_5IsCgbq_-Uz9@7nmWm8-YGdgfZwkvoJHFnwge>W44{@|3yuQ@6QhE>3Tlp{svIn$4dVLMUkcfrnd1%Dj)gjREd46po|pyCGpAHQx;hvnVW2x=wR0<>yH^ zYoctOdD8hB&3s$rz0!nXn)7Ul_emEI6JN3UqV8J#Mq6dRWYcT@PALydW6ycD|596| zva`EU(TElGC|F;j_rz@gyaui02{*7joY(8-vHan2*Hg{IQiw=u%W+TQvjx&<@hJx^ zU;hZuGY+xX95eW)3L9$3%wUzHY&E3<5 zFL^!}j4*|Cm-VFNHpdJrdHKC*h$_XycR8AvQggKPByC(^dA<$Og7Qtz>sU zE&Us%TFRww{Op%LFjhwGJ}XU^%$MPYr|kWUPDd5bNPd3ybJQx?e3f0)#;WXE{~T+4F-1Pd8lR(< zZ0AbGeMafep(JjWpr~YC=xE&2(RhSfrCQ@sy`hylS(R4utYEFrA#;T^c}_b1bpY<| zShZwQdc42_=Ll%J!dH5`RlT;$0`3u)ZY!_Ail#Lmq2}k&mihPfFG%<-(*Llv3c^)O zyq<%zG*7lU7JjAJ7qHOTdu*PSY|ausrQLUy^3wQSL`=jenO`VvSf# zF|VU}^ZAthI`(r1sr+^5-9`4-(L2(q4auDUsF!isC0|AD(SK4~F~_>6zaK(vig-gB zD`q&Yqr^9)(H6x>;@Ypx~Dhd~?>3uUrIC z8_@sg5b(1tqFNe*SAQ@;Y4EnOBLo5qfmKH-Z%KD)%|>c{3!^BVa^Hqq|7ELuTlyLI z)!M0a6N1RT%d!apvG2BZZDIit3T>h9O1O(=y`75w$#Rxc?LRTir<1u3k^ zIdy)C!Q5{<^L8<^Ee;pz|4>{Yuwa>I^%v`Rq5iPqLNz~<%Xhl)2v>i)E1$Vg@t{ue zpjtn|m4BYz;X?f|#f54C^-NlE@up0*fjIPoYK?lO*BsX00J9@&GprS;aI+K=)Zclq zTsun#J4=_a(oLJC2^uYRvPykqcn=#mk)q$jS|(D>d(sNrYzuu~nx`>P%KIoXoO0in zW{+4Dg8u+I&yNkS#fzx+ee5h2k-?6A@44(k-MrOP(cc=L!d6e2iEw-_Zp27SHRrPh zbs~Lfm!@iBNw-D1U__jJsvA zgsGQMe4}&+nD$0Ab_umLs*NRWlP2@6;O?Z-%IZs~c$@SEN@i|{xJ#&LJ9J7Q)5q9% zT|y}zqvJxC){mvh*l9IMOTCo66+Tzv@RrA=l+%PI;tJ-6n>AOmWGY?piFA(U8Y=!o z`dn+rH=;k4{vCh-W0vbuUMBE%hK$W-crpmOrc)jg@g`??uvPpE?SXCBA@#DYmSHCp zyoDlmBEGj$!cOUD#*NvoX|6h9W-4j${oLeJ-7!cAKNg71%&H z6)5gkKp&Uw$X{8a@6tFFRBuZuF^pTK<`=9k(VLw0i=6ebiNA{?zmO*QJ~ZG`-6X_l z?c#@R>0d}sYcy-te~C$R4K_|@)(dcP$UKkvU)r<=N}*Q>qiyJXB@b_1<1Kj#ORp9M z75`%mC88=!$zloq&HR_re}VFLE2wO@v_iZ?)vw`Bo992aa8g}bdk%lYI zOq#b#+6V>fH?2{+ytEa5YeVl@gWDbm^c@tx2m66LY!!Rp>k*HX7|eogGSs{O!KZCa zUrQ^7o&B_JA{+J%70Sc+?aFHw%AUl*-%wIu!0ual%i|5jSFF58!v@OvM!LYOc^>nR z$4j3n>G1X6QPVe4h}ZKfd+|n139p|5K81DHJ)adGkJ$0BN3q% zEI1HAonR(Ifpi>4fLI|X)xra{vrU37$|N*_;&EIycWB5m*oJauVT6F1W@5M^9c;bh zl(P)Fp%@760yV?>95)YG!9R|mW8@?LgRR&D*Za?ba8NvmuNQW*3Rq4cjuo)F6@rr> zEYQsZwI`{-pySW1O@IeVAxH;`c2hj?%xV{u*T!D9{W=cmwO)6d3aOGhvyq+8?gZMH>Al zmk&^AXyWe=t7;)I0>T)@K#2qJLNSh$-4v)n*_v3ax^eJS9O54fP;|kWrLyx)LN%z{ zavn6q!I@Sd9di94*U|**v)w$f5t*l3p>DX}XR*m5WG_YtK)k@jGoU~@jBZ(s_~$WK zxOt%c3@8u}57e>vM=)~hfU#$wPaI(JFM}36IH*5&UPW+igZBQT-f=Z!4BNXAStU6T%ju(F>EDu&k!1YBeJ$084FyN^1H^8bU2n>ZV zMp01WFuY*Jae|uyl_(o{HO`ztnb%;`aTPY7*AAL2CsO#BWxJEG--F;-q_v>ID}eY9 zzVNZjmR}>=S&r6t+f6t#1x13&K}RbyL_Et; z8?VT~RZa-@gcoYuJkWu>Arg*u5dWh!77f=YgKAg^Kzx~^p;W+fjM%orYJcR_LRgBM z2LgvMBu9-uv$hDX?}6}4P_CPj)}d42=<#O?M8N7cC=r8H7)qB9FouhN8-(N`);;Me zb)aAs6i5Q!xH`_&Wt<-G{jxWVb>~q)z^6 zO)Z?2kr3Pgs(|&eZXU=1|8yu~;Tvs)>kosH^WgyypBH#~6tD~sk`1ftAUGbvI^9B0 zby^hQ;?Jzbzkd@7A*cuZKrS>a&(lpI-a99K%*UTKQU@VfP@)NGrkipnEyT?bz8y;z ztTn;qsSw7f5QSr)KnFW^Q@{YFq94I10VNb+TtAGV`q(Lv<%AmugwQBZ_Cq*70G*lw zu<%41XfMRQ00>Tm7rNa%5PG5tSx&-zxo~|MsGEfV#2e5A<#>F&W6SXh94+4j%ab3) zD1oqYHxHzomcL0~k5F$#qeo$x{_j#J$fs72Yf5-3&*}j!krQvK%YpRQc6UpmTx*P!8xA z?cw>~V`z4&{KUuMB?vwY>&x6cP>MXYeZ>D%1s$t?0$iU3>HyV(_;L|W1uUn@dM2zM zRwu8=Is#!)ZXRfJC~(^1&lD&`2dsr41IP|Vcn>71ed6@Rp9#~!>Q*S>gS5POpaQBg zLmdAiSXzu&7eg2${5L*fBNXVyah;n2@$f*Ur5u@{`e#rWY2|ZgmMl3>!!@ABr_f1| zo?!(nLNo+-gY2+A)y)HW;GbTF5dSW?-t$@XR!|Cv7Z`fF6|f-QMX3;`dGp*qfip;0X4Pa^(>5LgYX z)1g2oj%(Z$@P|@KFXFTel=%|o^Ga0SI7DO_WJ8`18V1UI0cXjep;Evy*oIo4M@NO= zEO@~a#McWvd4((k8sZyuKQ4vqYe1eaBLqnK{CX(Ina2&~e+g99P3Z zG{Uu!`6^D|AvhFXsB`l`74qB_vbZx&73abAt7K)DD3gA&gN98g7FZjNrGpDUb>ec-kmWu)Mx|W~pNn&I>_Nn-Kqv zI5^V^|97zK!2vHY^$aM`1EY)HLHx@hEYr;c zo@XE=b?|&=4dNdI1-jt{-UIn(K!Io&ZM4Ak@i=IHd!PcmGDCH2hoSY5R}Wc?QZec* zZE!;vGP>Lp$b$!rTQE*RsUKiEwc{M2e#pu4myMRb56^(|-^1FEbm$d8{Qs)arp=ho zAv^|NXms;HB=~<-cTjnj;v21jay&knW6SX>b;Ih75ZnP_Np2p< zI&}~Hb^MufwQzkr69fe!-Mn?+lodEm{FwrwusQ-Eh(c-@0+$c)_|f8TfK>+|u)R*D zawyRXFXTaZn41FaC~N*0XUw3yCiIo<7%iU;o-8L)_*i9qAT$D$z72|kj#cg`e9MUx zK4#gPM(p_@I2B$v?B;{zd(GO#eb!MhvITs}a# zQ;2^Tgmgn-_eUxfqhTX(GWaGp1*%x*Y{70A)bttBU6@h709n|dGen^f8UxDNiTMS@ z3KgSvZ+6c-6b$o&NI|WuiJLmD~O5>U3 z@I)JAZDf6bkALDB@IVYYUj*djL4kbt_}8BS1#)3^5tJxI>bZl9|LJnM0Hcx+YaJ|R z)CH?kpg<;$BX@A|XA0DzaQz-EvtMHp`8Vcs92@qYMzS2G@v=5tkOm$23YsE4oeEfv z)_61o8zHy@)?3{?kcYgZ)j3I?<*1EC!SzX?CQt>4Z`@}{6|f9!+$pFER-4;#=>)<8 z-8@h~lnNXz{!EE%bifJ->e`Ko0*W{lV`=md_KBm$p9$%N5IdAOj5Hrg@Cpp!u`B*L zur?R5&V?{WK2V|<3bf(4(oKO#C{_F|@<5f}VYx+`{r$-h;(u}#v5fA=Oa^M~z_|g^ zlWNCuQd+CRq9M2wv=P=PxOpHC{J|(>8BC#Lm1&0SyFdvC5CRZiE_84T;QhZ-@IWrC zu7==52X2ZF8ef)T{a>#-n{XPk~>;UI=5s0@?^;$>Kh&wv8a%yPuN z39`xt_5q7v{!>f_YRGGQvd0nVe1VXY1qE^jbU?(v<_sv139IvBJ z+i#>!{^?B-f2V*52yO?J!+Nuu2eQF;mK)O4!nwH~uI~Vue@6&FydeM6q=1DNk_D?P zAvhMo4!DJ2!*J1j`>2k~_> zPgDWRNyIM(R@XvsC4_Bs>jVBL7?Kl?KeN^d>$@R57Ub_{z{V3(;KbvvxEod{L5V`7 z9Y;Kk^QQ2f9Rz5GhE|$w7h@$IZrLkmXnz zr^s(H1PPs>NKh&0SPEEwAkWdh#d$E~X(U{q2&!Ts0PzMD z^(%n*^BF^V+zP8b5yo2P2{#V}Izw{0;?E4phwFPFJQI}d)}O2n1x{Q1nF67(x&=x^ zAr<;vKEUHc8~-*4$w91pJXC6f5|vOO34D{A0=e)&(kR5gVia8DjfunyW7_x3QnUp^ z6G5e(&=_>46|m?av=)>FFL;7@1>#S?LU{fQuCD=k`XB^Ic?G)88i@J4p*cqUV_GpsH9qs@WNP(axSla|ec*{CYvjP?-tPoa5!}VoI(@(q0v44b7t&o>; zR*;4L5u%}l0gPH4=esG;hQf7YkUtg^2Pgr@<>Q8m5dXn6RuKT@K;8a9LMqb1)EQJ6 z%OEXDhhTpQZh`f=ZXVc(yg>;&iY&`uD;|dH0|Ox(lmO!EC7!$jc>eDwS{;p739H*6 zI1j>1ZXReqX$1xuf2L3(JWvNg5ug}1rDIRFPYgExOo1*4selp!tgjzEFa$^Q*kE{n z8UG4cYKF_}AdJyQD3J{X{K4;VQy>P)#hS3Bf^?uzP{hRJl4UT323_XF6+rw4q2-{< z#0CWk@gZ1ELERv}?PfQu1>wbrbsem&{F6X8 z4-7^8t0v$qhofjHVTa{92oH5rpbW~zOvRE9N(@K*o2Fo1pLS-+1ewvGyfCc)?O|tD zI5W0$GWrSRCQU{Bd)zz_c?J~9gX_ydJr?|F0`Vbeg?2nX9mk=Fe@X=6uYR8BP6o!u2Wq}(i0J7W^ zs7K+hSs0_UaSbO5C#X1%ojdeo`Kw0jXJQ%!^+e(f3F%*zJ;^+L|LrfViihA(2sXkC zRc;FRW+6T48k_gr`DSjGG5qhCqS8 zj6YML0-aNaMp)eiB?6I_&KRfwugu9EA0__zu(SrTE`%^f ziBQ501v+tD+$kWd8b0!3Vbkpij%9R|f*iSU8yKs}(yBk`t+5n1bqA{Tv#Fq!aW)s zBX#13fWw^F_F|4aR%6MX87h>4YC)}_9+3a6Q2axv1Z9JYLDisUP#4H^4)Q^Xb3*a35Dtn#)u3ij7szui3V;$p z*`Q)jHK-ZX1@fGSd{81N8&nLc1~r4aK%UXa2PJ~CLB*hIP&23tfH3MbF0@jV_>_rZhG~&WUW4fn|t&NaGe8i_H)_nu0(YUOUx zjiPn=@`NS%Zk;FFP2qMogE|HpAVj;>x4Wq&%%__Wyvwa_;_Ytg8QdIO;nr@en_kWI zS%Ex38@PmiEs+0qUgNZh!U2$B`a~fN6c5S-<%23g^`H)rZpK6*6ch_e2jzn*K=v8* z#9H|xZPq>X^;&tVHhKw356WY-%@H)|K{;3>(1j1m6Evx`>_ItP8#|lUgBu(;bE42b z2dz3rY;n{;95{z|qnx&NCiOljPts=2q)COq@w4b6mKM*Z<%RNiZS5?2jNz&%dJCy0 zkUlGvLx;_tC{V@i^62mZLaHJs3X9WLXXV^^<+7WXXRPEE=$b(bACl+mnh6v4V-`7p z);%PT)&_2+*B^p4`FXVcA^BZRJrz7GU#ID^?R{9jLj!nik$kaV&ApR^`(X*+V8Tq> zyG8O!4HZ3x{+Y%8q_97E>`xW`;D2;adkmv2f-w@P|C1ll{EsdymjBNyr6OFo1jWm>f>JGozAu*N1v%M)!v#T) zY$q;<^FtV>b03#4(4^2qkIPFn<@D3z@?@>>Jo!B#zofC!<|pJCmd~CK7tTW24x}>D z+m@|bwQTv#rkj>!WTl%@Q-v4Q{Iif^*%Fp5Uz3)#EZvlqvHa$oOp{=8OZq$j#1Jnv;=k za^_Xgn`HhJnb*M^SJ9g<%l@>fR6c7=^pZ)!g{tEC zPOz(U7EPnCOXV?|4*IQB4%h2m3>QM^@%6GFEm|jgX(H+Jb+Y%w6tJ1;t5ztaRsxAC$oh<6@zyS*OShhlfm+3bY6Ll|z3&E(BLetg* zM)$)sKus1sx?Y|Vln-d{36Q$gEEo-DS3Jz7!vH^K807e}T!)DPIF46JUt1=x z!hehZq)dK66GgW_DK8jR{)!ro7aeKJbM$kG96vBF`eA=(Jv!qld2&>K-XtM;iz@`3 zX#+7EaeXtcT9vVK)r|g~*n3aOSHtj4XeONko|a$L6j8&|@&a-1tE%`PNGzA%)>PAo zXE5-Z$}!wJ*`GT0=Ww}f(r#?0uOE~B#OT-58t2j_&-`iRRU*b(M|*pGFSST~$7Y!Xd=P98T51?k_9$-ZL# z8>$YE(z@s5xvsXc;k;bmjLcM;QX${rYpxC#E(6^F$^fkdS!q*+eB-!I9I}z3dox@Z zgEV`gOMz6HxdB^BGhMO)>PK#nb=3Zt>?0PUEE_tH(~}$AOus_+7L$7I^YZ)w>Nxhl zWlHYB=jFFtxroU*^z93Blz!veOs$|wd6k$~qlze?XDa0@1{6*hmA!firiL4D&A1aI zs2e3S>8cmy8?{9Z^p6+im)Mki!%MQ?{5-h63*ErEgs_>L$E*t_uDBy(C2ZmOJxl0y z)c1+pJ8=NN5u=|TGkN*Z&o9YWxs-B*GTz2Q`O3@kM{wEg8)eI!9#mknKARUAA>P6W z&`8iI&{MVH!YiO!(EFe!&~BReicFd++Wd+fBDTB}u9W`9_WdjJ6isl_$~zaYTyfi# zusef`dXOK4mSI-j?{r;w~;U-He=PTIV-a1kyqs@ldb;@7tAQg zrjmuAV-^026>dghRtQtdUltCplBao@>cWNdP;fekbs2#&s^ps|JqflMh>ZX?q2oHJ z5H>{+>R^B~T1B<=bCn$B=^VTRRMrYJ==#^>d72rt?lt)WeOWb3q`j}nv;JH@dFdEtANd4&c2HBTB zsFtUT^}x&Izd4}k-1rt5s44V0-JV8tVWHagvy7o=^VlfAho#2(zYj2`(Bj9Af zcG{1^THyoocuSrynmz~@yuqGL7rrH*KQSGUwQ)C67SZ`8L8!(t`>|BZQrnwv$=;fP zjUTGUyo;2@=R>5-s21Cvx8>V4u0D=Ynm`qsWKZl)C}QHbp%B5A{G@(k)kj$YxD z<{$FdX`x%yeme^(>w*cW!hSQj;{-=uDqZ*wIc$Kat38DKk(*9C{vq$O*gsM$PfMEr zH|KF9c&uS(y3K*NyQLpHFmw5d*3~sCGPJ_SG_h8G86Dx1S~)~I0=5y&iQDM+TKSa$ ziYL%7@5sJEW44DY1AQ`5re%EEs?7QGFI}-bLlC0DlT@#zyeoTp)oxQy?$@K-MW86U z=Uw?j-zc!p2VDWW7IYIRhpzgk{PHNDCe+R@Xpo7K+m+)rXvU>#m40-w#bj{Ri@n=C8oaa7UN(rb2X zS6b*3JGMB7=^&B-{~hW;%(yK(=T6fqZ2!}8RWV0#UDdx6}Rjbl& z&M@WNnVpeEX($p<=qR#0K0Y%7R+1Sr2jykp^2b5 zA3%o`x|StYy5|FV5u5uN>Y%+J-~_|4i+=wAdrK4feu(-pH0MLL#)tCQan@bo%GS}j z+fGl*NmDn>Y|?m~Rj8#mS<*^7K9ommdgyx~t!E2K_41f;kuB=@ch*<-8~aAEDI)wD%(xh*tWYwPT`bjq(C463ZGPq?n#* zgaP%mtr3lP(NB%?b$XvKF>vW%qdb{%w#k9m89%;Fp6VKqTeitpF2XE}VoM-9AH-%~ zCw>ISZ25NLb8*ZzX-+(!VY+I&yxY|zCTKsp_+$A(EUEEdg$uXQlOJP2X~ZF$(7&{8 z`B*+Qa6-rBkx%4ciy$=b2^W^5(8VCOzOacl@oROGVJVx!oayBbe1%(jr315x_Jr!P zskF#Z`AXXGsr;bJC`?>)DWX~S^iE&B5`$`ma?T_O7yg^=G7J8Naod7J_S=b+>FG>& z(UyP7GydFEDE#BwuIw3`p_cp``I#j&RwPUJAt9PM4* z-vBd@Z?FWI4F;!xmvF4-@XKy^BadnGXYw6sDc`EQoeZQb=*yPpWZayw(v*thT(`VX zYq+AXv+UB$w3TVNpukF3qO6QM&b(DQE7>Iv!A|QwmmhHTJ)DnSd8rWh9Xc&a?>DHs ze`hUcnrd31sNlqnDDT0wj@^T4#Z9IN6L_(-`3tu*zKbW^v|{CLX*sN8gdRXYLNT^t zvEmA*j8=KZG#_NK-Afb-OV?w$P5<@;trgkKw{JO8WtqP$qtbGn#nd zIVe>}mw$!qV!#=6-!~XC6<^6lO(VVbl|0$28*H||4DVD$Hqw5uwX-^DWSjgt7PHN5 z@;p)Zle!;nr6X-vH)H9XJ(!B~Y1tl3%=NZs_Q=m^E$t|D5G4GJ6&w@b8Un z7a+X?lmc1?S_QI#ia^hR-T-X|?E?K9RGt?u{DAbopk9#ppK!qhiU37}>X3gC(qvHj zf5OKIt8lOu^f;&-^a`j3^bUR2E?=OHK1lDi$#bRjgQ_vWy=~YURUV{;d*rFu25j3a zkJTCv(YJf$$22*#`WqOD7ieOR;W=*fNZ zjquiQ`{W<79PaOsC+H)7K{RP^9cI==`{fbv+9mtt5^N0i?w6NJaleKOYzT+_N|$~s z&ze>W%!cepU;m5?)7bTBy5!MbZGGy7WDa%& z?21eqP3e+nOu1KxP)vv;(r*yJ<5Z+vIl1;l5{U zB9yr^LZ@EXMFE_WPdO-uTum<`5x4U14ZQ0+b8$|-&*{L0pW3E*oeZL>U`!v8Cu z9egXW4E`FVY!6h4U|_-&%7NKzIAIvA{jWUU*IBL!e6}R3?QGB+edv?_%ChFL?aTkl zm+7_9B2E2Go+?I*5z2Y@D-_fx2hyFt$#OsM?~FIrD?4lTD$_z!q_gO&j2%Ebf0M`e z7k!=aCXoN{vi~?|xi=u5tw2sJ!3SP6?Vvnil#?|AEVjdgHuwH6FYa&dHP+lBrsT*! z$#u`-eO?!&!JX=47_TbK<$csw~ywEH}Iln9bYH z^8W#5(R1P^2c8063I!dOFYwAVMkuquJxJL=PO;s27GC!NFR? zSYt(}PkSh>S6(#JS>Y};!fbKkEjVU6JMr&0X1k0Y+R=+U4?PsnCtqN3=H?=Yugx6J zW7!QG-SF+ep`5fez}Im20bsVTamvd8hBm?djElht<_e4iRuovLG0yW!^o&rh+OTa+ z7$|Ymg~msQi8>#31a#A$Va5<`s1Ip%#*4(IV2?(ryXY#NF+?l}WS+Q-?$a4>9n%BI zt~N=&5sE|~%vo&MNWSEuH%=83z-Qfm37xGsUhK62FbFUK#9G-v>-5HOtRY+UMsFma z>5VhAp?>7yVO*kr$uC0CDpM1U_)Rv@qaMb|Vl|i{s9DG27eJqT7)SQ=Hmf|3;l@$8 zL>@5Qc)q6EcKvYUaE;GbqcM#ABZTpwSkNsX+Hp|6o7xY`dP+DXTPasGCV6!PL@4_~ zHaRgLci8rb#+N$HqDPF$3A`QUBJFK1?mjkMYc)8aG}Nc$Kup)99_QLRJ~Q z8D{jR)L^5Ix;%|Kedyaq`ZDR0K;vlg^fKzSSvB;tztN8(yo?5YTg{O^oY4j$GZC1b zhkF?(YZB=`FSHl?k0X5*YHl@hr`Umw5XXK@om51<7CfigY*(5CUKQ>2GLF?m(-GEK zG))|3oS;djIF?jW1`=(Toz{*rjt}ts;7DI0YcF=BXY73%WpYl$_=~5_qtHYseThV0 z_~DVhEV?hq=+TpE7`q)MumCdX&)2SW#sUNxYWEXR~!AqtzZ{viB zW@LpyMO2AQx=&N6eQ4Mdx)Qx$0xN15nr=MO=Y!&`$@PAiOYPo9-MGf>NBTU~TB!+Y zEk#%kYShtQZ=?5B^&cPUQzv}YH|5A`1CI}1HF!01w83s;WiwSvdmbHp;m z$7t}4X*z;;Hq{?1V?@L8bf*toT24>;7}=$iZ9r2xcO2=9b`)d+ic!#W=aIfBj#mj@ zBzgH7y{AMYi`TIUAPhXGj%=B0SBhWaYaFdlM3$pBS$)x)%66%}sod9S2r#t3c@8nG zegdWh#&g)wj55QlEl0=_Wb~yjRLAv>Uwn-r*wY30AjIQuA z25Z~Dpf!HR@j(@>NBY>fW_`sO1tumI%VIO~>ea3fF*OmTPe`=gyGa^t z9HZ^{iYARVj$hc-Hqh`+)My7Ulu5vk`A)#OGArlo;3lwq!0TwE`$rptFEo99q|Xi> z>rGCLm;;hfrXG2UGaNmewU-6H9en2?V)<6^YU!uZ#?jN_|LqDB%c??FCV1^QW=69< z&J3;xKaytpBlhuhxxaDpl%8)~5o3Z(Oyhk6c~RgQXoEinwkNV2L22?w;0l4mP(z4! z39+Jh8U4hB7-&QQ2C|Ok1Yq9o-cNrEFb0ErPk?dsl*9uA#l&FRO$N`|so12D2p&ds zfN^X<7qXP@>9B{{nU8EwI*8V=j~B-nCj=D#;P6DMst~iO1*NL!+%f31wa9k*kYyc4 zRyBAg9J3#j=_#?XdCwT**l8UJMe8uOEkXB9O#!m}}CH z42*p0`l4r8m)dP_xk6m#I#= zrbOpdjRsk8^HI#74vvGZtt=TW)`3$tthcX@wgh1PGmkgwrbX*|`{Gd=PE$g|Z0$n1 zOz@rElks#ou}h}g#~Zx^Qjui>%Q@Uw_l!h#COtFWIC@MgvIALFM;KUkDze)Q^yzq` z-;@qRZ(lQb?8jOzLSBW~+ZW30z%K$+0UqwJPcY61uzJEoB}2{XKvoNQxbG8;tq^P7 z2bVAmbl(K@iei>vRR+hO-ejC|mU!!Pz%kKYZ~|&a_x4q@7Gp;iYtT`c5|zkKBrg-D zRkMF@U!j&h^}z29w>#s1sw+ zSo?(DzH%0>(fV}26xxBJIEDVrWDNJHp4i(LrB!Pr1YyHaGr6~qX~2FgJ&Zrq;F%Z$ zKV_U^>yB|6#HQ%U^c1Aww0(1sFfhZMG-0$X7(>RB z9tt*&osuwppr{0F8sou>QY9&#PX!N)7aH?Tn$_FKq_dw1REex)@(MAA+;(7gZ=b;8 zmF1dy+L7HH<&wZ6(+yq|cxJVa_Pg7N>o(nUT+K7XP2lx_=X5ozAH}Zk(1s91EoN@- zfQ<~xPDgeH?Lf9~#5}ad^`K&8MbeQFEc&H1Ez}q?t=-(~oF4jjLWfbxd~R=FCmLfv z)~F}`_|rY1=sU@@F4Q<D zr5n7AW0cA4bfVs5U^2fwG>r3iC%8M}P@jKd>1WUEdUc%c+973Y5C6vvWMx_v560c)v%Arrkh z)i~PE`Z6Y4$H-Egh_kZhjr8?Yqo1~GBmFwnINdLM6Q(@u$k`8u2u&!{Q%m#1jbnV% z-|6j(aMWj(9!6dsEekhJxVGt^jtGOzw2Z_}wjS`h9K{(g7QB|tm}YUzeysUq@VdY& zV+`~T=f0Aa&p}=m?F~mXQr~m+H>Pb-Z~38kMK1KhaKft0*CpT@U0LPDY31rtMV*^e79qb9g;8gQ7&g{y!A zEkQ1g{|827aHvoL*E0qFz~=5S@|_kgHlm{jyUITfTs0w7$aj=qhiy)Eh)Jjy)cWnf zIiW6r;n-Wf{yju!bF_EB6E}jxxB`bzAc4bd^PhXvZ9G(nZ$>Ev6p(8NL6oo7r;Z898 zxnBMNaK}Qt`smQO1=z~ve+}Hp;RC>?hhTuC{MkMjhIgyau(26=ejm7t!`py$GhOv}0f%vT4{+0$ z!2)}J$-;)!OtwAa3M>Fl;&2>rE{87zwsQDdhVKs%vK+(e4d7BP{~h334u1$-+==ft z7%={s0zTLzHE{*T19x#a4A^Iu%c5DpfgFwjwvGrEI%KsEJqjGn(cea4m-q0yi_P$cG3107Dn$5}+TA ziHO5z0cUYI0JxmPA;9@T!9pI)VIIu^ZsPLq1@7T+A+Y}({GSb!$4?_X0Y(fM>Q5t- z1IKgtCEy$mR|BUS@Zy=H*Y^Ooa`{^9YZAZ2TZf{m(3QZ^b6xFU4_rCdqZU&<< zCrGe6Vpt0txyV)F17OoA*C=TMjyT(u|2c3phueXZIs5}~F^Aa(weoDN|LRX8^n%gI z6)<2sc_1W2sCM+~6yP>4|0dvW4rc@V&v&(V7qE%LY#VFO4#AZO)g!xsqbyv34lt5A z{4;RgoM0ixvA!?DMl*}czYw^X!&d^=aQJ%QIu73q98rMxH604n0$WhuQwR zk;C(W4{(_6wf)a=wSOsaMLIqfB&Z>HZY=s=JXhcq6v*N5+rXt9-V9vJ;g5jZIlKed zxX>l=E8z4l%#4mv5)#PXHgM%nvw)G)hmUhOVtg-fGgqJxIEEVqPXM>C3>KmtG291S zbb+hEpMdSYu2J$o;M#Lt`I>PE35P8*7#$qL7uf$iSA_|{5geWZoXFwXz@f1r!bXQe z4+5ui`HutVarkNA3KzBrFM_er#Sq>A?zV>rsg4HqY|Ak=0_A@XO0&l#@)!;thWG??F;4%*X54f7cnhEHH9F~E5 zIP44TAL~$vt^X6ih;=f6rvPVjcs6i3htC17;qV2(O&q=)Scr33d>wE+hckdP9oWL= z{uN-9aRu%K&Ygs}z|js{Otu3za``R5-5mZJ*k`dz-~r%h4j%%JV5j9w;HAJVT!m!d=)dFDb(CiLuK-7Iz5Z?BG7fJB7A_2CO)KR`24M%3$e8Sh zJC4Aq0c?~o`6z;~(g>j!nHa!NBjCFqLIj8Ls=biFVKcCm!xsUUau~1C3$+}+0XS+x zh_dBk2D}B_#PSvSVAO%p!ByA_Y`7Q&l%Gau2KMCeZs58y*On_1#)fkF^MT_z91Co} z8DFc=sUBGeoPvB+J`{Kk3@caR72rw^zYSc);myE>R(#56xWmOE=p$UdKd>&rWk4`+ zAcrG>^Ab!B`A}dk7)4wGGjJ7$F9L4ma1yZY5|@A*fFn7a2^`PimB6VS&I2yJ#NujT zEf{TFfnwmp9DWKog7r-0rx7ZF!_IbXxqbmo;qv={3pp%?VqW2}H*k}MV~hi%mBW*P zb(gsW;)QG><)@JTE!UmEnOyz@!1dqYQ;9k?BrU*=T>jUA&vx0&pdl{~B<5K(J#=hV{P}3?tX;4O8G!4vzvZy%VdUqfaaaj=Ihy=p3Wwb>QqJ zE`@4=D@?9Y^8s)>%Bw$(&;;D+#BBZl91LTMt3W$&EQfypPUdhoa2|(yfg5MKu996b z6$)_qDZsTHz6rR^fzkgpLN*v3T!FiQ10M+yavZ~^8Q5^WOTpd15gh)1uI@j+>gf;Q z_}PzYG_{ya7Ps2g($X**jTVcgsj0;%`#Sf2&dz(gkN)U+-sf{Z=W{;i$LI68clUPSCOS{1cr8{7Y=!h6`h^JdH(x46_!FEV+>Q%8c2f`)_=$vS zk)a273LnD33+)aAqG$o(BXN>&C@vO`z^%g3xL4b=e=2Y$36be`2MO4p`vP+b_8`s_ z@yBqP@K#(WyaTrjzlsB{wB^5zW3YGsRNzArVp)<}e7rN?v6EP>#0I=`r@D8UVZ#Fk z93*=EGMp!T500H}pNf5sTd%hj=)mz|6P^9Dxco{&Z-&j#i`6yOz9%W=5)Q;E!Xt5} zunQLnpNLaO*c+8)xcnNo-9aG&eh}{d zXN=1C^|tVpINB{T{Evhb;ahR8up8$K--9cj8>^!Iy#;=b%S5~bw+a7>dxU$jJL)=H zL*Hm_jf4Ynn(#CTa!q?(9;cOi8 zu^lC^-*Jubzqs`KaeX%`Gft)gqF2wsO@EG2 z@y5Vvk@rZXZ8Ud0)QjSe$W#jgP}w!jo{3 z@DyAxJRP?PyJwNmD-!1896viuw&K7W?GAU~FyU8mqVU@|S@=WT@P!>E<4@%PY}~C* zCZW(KsHr$}&R7-aOhiSvOvE3;^}^-2LwFnR60X5{SMv3@PI-f3m#)a{ohCZNkWC#K>w{$gYe#5943o4!=u6hsdx;XSl@{_%&{+w&yVVbS9EpU43s%J?oE;+C)N+$gmwp-DWp<9>)vs#2Lcx;O0Pk2{w8Pom#}l z<8tAXaf7yZ{qs>%NoW!oX5hpUdkMA?cZ>LD9DKX2;4?b^MtjAizlI@J#1F@5!ofHn zd-u;NIG%(;ks%T%ZM1hTci<`!Ux_<~*I<=vE3_WR32(wl!rO6HuFKg!6?mS6QjuXN zZWn$B2i{?K@G%Y({t~AM|A3_(kzu$t4;Hi8PIuCDTrA?( z;}+o@+#|dUhb*-_EX47`_v0+LNGKyA^XGA@$C;@*aJz{AiaRc_mtfP*V~P z5^l#KD_qL^;>HCh2>0M@;X}AkIN&TMB4PKDB(#WxP#n6_?jQok2}k2B;WPF2VfHE5 zy|_%oAH@ zD~4eACIO#-Lj&x?;#+XLh~J5Og;(kP_t*-p!(qZ3aZ#Op<8dF3b>eQl{vRMA zO>8hIo?$Y7tmkh)^vriL&KB`>Tq1lut`*L~^}@?=@MU9FY%fk0@!xT#@V~fdo!b^TB!ONnGK|1Qci2m?>u{}zFUD=cOL6QU_KK+q ztNU&FpWrazcAV%I2|tmLEZl=5@3#fcn8E5N;&X7d@TIs>_-gF`fUUp{I9T|0?2Zu$ z%SlKVz89AYKZqNIAH!|JTk%2R9XP(kR^U}!DE#&e`hTTJ_>c^(!e8KW@!7Db^O%|+ zv<04ylZ4}Omhc6*SU3gO3NJX1@z)^|GRctp*El^S_~)alaq2^MhcDyGbM0rthMvz% zC*nurC@~6LIQBmK?07M*c+8f!)J=jq(+-onaN!1<;XYg6P}90+U@=QI$SK`8*z>BX56-Ttn&Bqw6I(K zNkXH@pk^}eg%8Ie8|@JVW0&ypIA=4zD&j3r-GpOA{04%=*8Egyy~kK8}am zg*RbUW-G8AM+rZV(}j29BH?#%h49C?-dL~yUy{&c67Y{W;SsyTeKTw+%0@P4tmsEKK-9(xg^9m3EInWns6a56uw{QAIi6oJ5ByM?h^41 z+&qep<2e;NZ59V4di^w9?X{aMK58Zjk=0{Wr?bJsIHuBDLmjWc5G!m-NJKm@DsK| zX*g8)TI{N|Z`ar1XdU|#RoEkV8b=D(;zHp!aH((;t`+_ScL=xRpv|`YpK#n} zvHtgvkRmc1!db!rvpHwNN8(Q5P#o~2-9ZG76^_RKyn&IYye+UCXFe&`|9eR&5gR;+ zYlI)et-@Pzhwu&@w8d87RouMK-lzv6mo1v$8K z4nN>E%$xr$d~mBvg*tsCD4D7ISzCcoIDYy>j#s~YRT!?^=JH5)`bpSbBNC>N&>}n? z2X40;%)&0=`8Yv%A+8!_7ndD4Q^a4z`ND4})Bh?&!iTy5;V*CqALNMl_a5=d7ty35 zJ{9)}&%kw`+AF4qa7dLsfN~rsyzL_Tf4WGhAw#C{YdDk->y$V%-SD{#I}tw?Hwur# z?ZT6A=u@@=Q*e~%&YGTx=FQ^>Mf?ifDSRDPPum?X#$m!s zai*~QE)wcQ!dl!Wya5M3V+(u&huvWpn;x7b;)igaa6k%+r|^-u-kQ&UlF(@rR0IyL zwmXc*Z3oAx1m_gw;zAK$fm7$&r(z%DZV~?yr#)-S`w<7Go2O!||FQGwBs=V#%u1Z{ zvfW?}ZcnhoXgzKqzxTznW85sf9d`>qk0Wbr{+&3^Sg-%@kdST?@W(jqVmpk+U(C&? zh@Xthgs0+q;TgD5cn(fjXm4aT<1Qyo|MyYPkP!5|t>H^J`D*(x`S43vjzv5erwSjB z^MoUDf$%A~?r}ScR^m!;T(3V|f|1Z6Hdv1j3U9)(FW3rh$BDwv<4ob5xJ39J+$8)l z?)BKS{&5LLLePtL2S4Iy;e9wq_yDdG9+XNa6&{WQYi)VQ;`&n->52uS! zumD$nXod}a1{XKj9lnI~6YVH@6SvpdcoPnI)p`$(d{wOfUz3n0GVI00!oTAh;eT<{ zMdLi*b)sj+i!Q?=emU+Cz6J-pW-D+Lj($z7|96lO`G_5MAK*l>!Dl#2_&Z#Y%r&Aj zF~wX?uNU#Nah-4?ZWo@5JKZ87jf446Af7BZ;<$d|6bIA~? z*KZQ^IW58IBK|0@5U#`x!q4GO;W`}rrY(OLju&oDbJJ;l9j8itygLlJf?h5%jKv|> z@LOw6{1zN7di|ZaOn8;vzG!S;{#Km$wq0AsEufFQZ!0v(O@b@Q4x1^shYh?hA2l7T zM(bHRzwmsVD!dS92`|FM!nfe+KkO$g-EWgnBQku5n}ol>-NN7FUg6(x@~3ujnX!;7 zo_B18=iqqZOL5(meQS$bZ6hH=WT?S~!mr^f;YM5|{1I-;vWv^ObUK-cPr|{wZH1=b zs6Mm)PbVR>FTqF6!nwlpajEb^+#tLN9~8a?N51P)-j|QM6UPg$!s*6({a;5yg-O60 zahLFB9N6Si-WO9ZjuUM*`F5HP@n(VNNyP7^A z;^*Nu;bg2nvK6`v2MA~2#&^c4Mz?ck^D+rhB0~dC7JeUBuI(E(>VyoYS`nXsONCFx zb;4)i2I2E@{yk%r+uYfdlF%tKJdVRYwntEfCbHAH}CXwMD9Q27T z@Bthx{0L4F-h%UlpT(8Jui&H+VXDi=yFb5cX#uzB)klz!R%stDFTe#No{77KZ^jMt z?8D_ZanomZu^Dz9o$ecZ03kSCf7I6V;*VaiJNI*&A&P_o;nQ)2a6E1kz5sU%r{Lf( zYBUVy8FGjW6P&A3B24@Z7w%Xi;RLbgaK#>K)9<9gu=oX=x4Giv_8>T6rz ze>g_?uag4A<1k~r z{;wt>U>|Rf`+JY@D;#Sw5bwmv!uxTK@Ijm>JUEMC`H_7~CJh&h__eskv0JZx*(BsX z$?xboGt=w1QEc!o?h@XEgTA*%^fe9<-iteG_+?^0?*W~81ARio6L5~#?4JtECZR}V zNW~4pSK$`nEZie}8+QF*E0m9ugjeHS;SyZzvEDxwc$9=nk)aZ|2|tI!ezZHN!wJH> zaE@>@&f=ofjFK@oGLwq`gX4a-mt@trWxuW9%eefq ziOT!(RSmd@{N9(3dJn5E>rb$&ORWFxB&3QAKjAFl9$YMZ2-h{+#bqvST_fUYxJme0 z+%24qd%N7WMoUO2UOP_J`g@PK8HfI2~0VVJtPGFW_NH1#|j7B zOeYgQ66Xtt;s)Ue9Mx^hi^fU9XWmTz%M%F+WGMXD4x0yYorph%)jnI`R_qeqffIyZ z#aY5{<5J-dZ>ImZ@Q0d}&agQ47Fs~`>Tx*4W$$EiaE^#C!|lR_xNHFj;FR|n&NyHz z{2h*8U`NR>ZW0Rquo?csMZ!KgbQY+#`Gf4*AoTHv#8=HMZ|dEbhcnBJN&A zLV`$GhcksY;%wo~I5o?DnCt*95b;5`GLs4q$NsTnl*<`a>A23u-RgQ0+HHc$(Hs0_ zk6;-N6fVSBTgIxo0PisU3`dIicQ{k{7o0Er7q0Cy>%Y%!tag0~K58iL6h0aU_u2}b zfa8TH;4I-&ae?qzxJ>wb+-$7Z|BFZn`P=T`avUps4bBw4N$2MxG*@|BpdOcs_-@=F z+=4rVzrq3kc=t#D=K_O-U?)L)KaLkZh-*9Tw^$_H&T1y&vvJLFWBdN__%ZA+di_?M zExZGl@CW34YS#Pte}4`o*MAJhqhCI17;eAP4wDev`mf6q)$uX7L-<7Of5^sTaJ2B* zI6*iOXL{_`W%{VOI>R2jm^_J##0J&4LilCeDBOUXh2O{3o9st8!|q_1iug%51AT3Q1vpChKAa+4ij(zqK1ZbQ8}{N75&s=G`f~qoj`&{^Iz@&dOWC2HjgP<~ z!pGqR;c$F#cv#;T7T$nsMf`SLx_FFg@bOlt5r?=%um6aI0^v3s__w_*pOi-@3$zuQ zg7dGjqhvbn9c<&Xuo_}LAG?GXVt0y2SVTgm@GZDV_)c6JY5z9tLtHN6U*KBd?{S;( zZ@5GF?>zcn{SJGlGUrZ?KxDWShX&XqxEfdQ;M;P1yiHhxqec8RoFd$abA>;``NC~? z(*G*nw|`hPX&IeFWSD|mgs0;!;aNEBFk8X-I7WCOP7z*&^M!A5lTalR?!>Lat8lmQ zIvjAg-Qh+YC%hRK2tR`>gkQof!tOUoXo$C$T*0)6|4_Sw<8icbBu*AS1?LFszo^I; z)}OGf5>Cd=d=*B9_Y}JM2n-X2=+%$o#CON2FmDF+JI)sIe{q}ekbEjQn{PyN@~7gc zqwN7)gN9ZluTR6Oex|s zaf$FeTqAr1ZWX=`cW8U|PX!i}5EN`HuoSxvaRK4uo$21hIU@cZ&T6tV;qe7@IuVb= zv0@aQg1e{KQL+-3jTY@Zo6>yEJ%+JqZ~x8n}s=W$4g&A$^z3BQArg+In> z(ak=oZIGMGC zTSCtz*Y&tr#B=aL;bp7n|DmCFhlON_7rq}S376qq;U{tLVEdiXzv4C#@5N30*-ens zCuSCM3hDLU7oVmpWc*c%ge%ApJcGsOFz*pOjjK+u8@!04!mVG&>DhMFyo>!^Hr|56 zgulcI!aul4ND&F$I9K=|-0}k70qN(h(5!nnry@QdHwZ7p-NK7-z!+PhTX2l9`%V%P zM8YbZCcF;k3va}w!kclq@H4ne_$3@P)>hz69B1uT?~#yl;W+O9yhk`@HBD+WsEN2h z_%s}Qj(x;(H?9})V%#D8Fz)?$jEZ(z@MoMj&Qyr?{|^$f`VxH9f4ErquzTsn!bjn* zyT|o??ZzV9BjUH7EPC}E&@GkBZ-h;zVv^)G7#|iJnDZ;xD~jlklUsccQreuOuP&Z~LVY-8e1ER_Gs` zTw(7EW)(9^M0`Gu6r*4v4vQPpH|(l$=SgGwJ}rL$C!8+s{|Bw(oZN1Q&2U^e*;XI~ zmk5u+HNq2dm+)y=MceJC;V|KuINjZ4hs`4-B#I1MbOzyPae?qFxJdXdT>QQrHOJl0 z-Li;>;}+q`*j@gf{nM#@5_(03)i~^AdjusoQTS1uEL@3WrrYxV#yKMH_W+|Hgyq`l zQ!hS1|7#E#UME9`@Vhwh6kCBkI8^v+94EXNXA1w0V~-6}sm>0!l(3wO__HPS|5lOk z3K_bE-@<{X+6sJtlZ8LS<-*_Ldf{JixA0#$I>X*aB!)dmLX6$PT--?$B|9}9{16k# z`b&!gC%fB3wv$K>IL&Sri-Z5PgC`&7iTG-)`09ubr`RuWhlqcVlTWwh{f4{7*+0mN zU(XM2rmXb-Dy{w!`~R({W%*Uxp!K8I1x|Ix^L_W;m#-RAO0T)dmNgL<37>|$g{R@D zxivbN-v6=XA4+NhCJb=x&Yz3aIf%M9Gzmf-+;4)pTO0^PvL@m z@2{!rwrJIlFxHSToF>o-ejAtzaj@f)a5Wz0_)`2D9^tqEe}Ip0{0uIjafdkm9Cu(7 zAM`MDwKy5kZW2=Yi2;-0GJK720lpa@=@j@hj$Ur_e}>P(rb7N3`L$epn3I1pzC`#k zTtWp7cjE55NO+V4vx90J#IMi{ax#2@kH%bsd0J?28TVE=!12krNE}fbK1hq0_$nMt z3m89(TWo%}Y9k>)6gcD&Rs(8mHaG>hv4N@36*yOP+DsfUbu87#MR? zxm1qh4fA|eXQ@l&IUaklugchDcldg$uL`Ymsi>je9oAg#tD3*HI~Z|=ud3^@Ie7np3=68*pwJfZEAAHYzi?|-n96hdz^bR1YEQHkEXJ;zZ3SIVvs#My1YCNF-Toyv z2~i@$8@MjPR$%TkO2v!#Yz7OXo^~K$4`3`C%GOWh2 z&-7(bqiVRW7V&X7xW>kJ;DaJwhkGBf@ucTj?0 z@9P%nZ07(0LD)1QzO(Mg$xO%Vsg}|HNpwo%?Qr!KxjSqd33W<0y z&MLR@3LG%Wo}#C4PH~uWn%iH9n0 zi-x?*jlFyAL_W>qy(~^3A><^Rp$P9^HBp`5#9zcQBK{v%#G{<}geI125nqg3h#&97 z%W#&6cVPDo>n3_?q%XsR-s6ZwhE%+P0!BLptiTl_z8im7Xe;;!t|y*Eem$zrdS9vI zDE~NT`$c#S`3E~Ld7t&a>p^>CQBQ`z$+m!i50qMZ-$b5Zcv~n2rxG_!n1^2wN4N#& zi0yyFH;M|5YNmo>`>UE6|DUe0cfa?Mp-p7?1b0)w7^eb0AF{ZJ_)I+F9vjcW!O`{r z>hL|3Kg`+wN8BV1_$c>BOcY{+%klm6iDR7&R^f%TfN8QFxQhIy1rFeAL<^1om|-j8 zH{sKX2Rr3$#2sRP?(az0D_UT93#-@3b_bW>)5SSli5u>kNOAhbZzAGc@_S!C>LL6H zEn+JCIxb@SATsDa_6shx`S}(p5}sg#!<`Ic_ON(}4KBpBb^~=WeoE|MIj$1=DkwZ6ba!d{|8^2~vB8l}4TpZpL?Jeqf^*FV=;3s^osPWNX z&}+pGrsE!we-^$~?BF)sB=SFwgJNt8SK&3}cOT_c;8POX#0GwC%mZSBBXBtz40ZCy z;x3Ut11F38H{$K$05;%*BL7=BJBIb&`{KP+5?*G5U}p#a;J^oLua5YVOE9s6X#Bp& ze>n~n`B&j;k$)Zjmi$LJ<=5e;2i$fCog_4i4ff;T*uWg|=&$JIVh1yEx5z&a|3iM$ z$(G?Hk$)QwI?bMf8l2`98QMvR78!oRhuv!@lB2(-my7(E;{5l*h;*0Sj$_rH9QCIejn_et7Xe2|j z*x)04tEln6_@Kx?;ai$isY)A`VTI8RNe-h>2fwOFWenpamWU;|BSQXhO`W)xk4byT22p>a!Gfb!A zB9Z?(TrBc0#$(Cvod;O|%Sb2_8#Ll-vB5`pG8>p)`!B8%`6v9qDG>Qj#nZ`eT66)f z6Zu!;Zj)cHeqmOM$e)CxMgEI%mx!;x z$xfX9@1u%Hc!UD=F7!3pi};|};5(cx3j77XPW};2{*X?3y|}7Pz{Mi}Y#b`$OK`O} z&i>hD0SO;b;9*XI&)_Jr!56q$6!<;ac&{jbF;4R2_Z+{k zdW3|aGi(!Y!TZ_3oWqZBn%Kc194+z({KV}wSJ7r%pNg|Y{)ISMfV6Hju=JLy+O3Gq>$!}C>_;X1MX<2bUI_5WBW!}}z(iVP!v zWAWiCcZ?ICj(bG>9=wHHD|61D$3atV1^&fXQUO!`gl<}Zo7KTidGm0Zn+;40Y$Rd0 z*x+rPE8@fVDYaW1@l;$QcDNE>K!wcu{|s&y@xSnNQU197tpAshFvO|R91;$SbGQ^o z#n}qJi4%o~{;t$1;sM4KoFU?F94*fIHk>cw`+ukZy(XIQ_#S$x$Z##*BjWetTH@v$ ze~w3q3Jm^(2a#vl3eUz3;%<5gc8T~Kf6)KqNH7H+{-;t0=!8c(Epj?86dNqV7jbK* zPnn)6x8VvA-;ZM|6HwkT`0-xdSBEz6wdgq7U4G z6NqQCLp_RK$Io*BBb*BSg4@I?J@#+jF%jjtuO#7nQQ#WfOa{{;d+=@I8PIOv{qKV$%n`kG{J%^jqJW$5I*xFpQ@}=C z*H-{Pd4NZV?S~y=9ue`2@sna=TY-B_T(AGTNw`!raSslfZfeMvIQ_>=MiYiO70AR< zB3_NJ67e>iDB@x4<4e(}l5vI;_dNeEC1I>MhYdJi6cFgc?;eXIoPx_l+>KlAwhtn= z;#%US5A4HTVi=F+{b2udJf9!%KL5XxgaB`Xrx!ns1F_3j0pH>%;^qjC7|bacY~v$wvWQQ|Wg>n7&MD>n|KZLN+)6^!5L>`9Tp|kCit9xD zIb2KJOgvxWqyW4954cUlM-0ItJ_@T1tp8?ann6O&VYYzTIC6u%S-b;RmDx^Lfe+9} z1~~`tK29UQpX0xA%IV>Kopu=?E_sOU&HBF;SGpgzcP=d?xUgA{|HB(7@Gz&q6A$C> z9z_26I9oU$^GV*mnQl8i4x1MG1p9Ba6PeH9KFVD{f;k0IBs_pki(G>L#D_Z-Sb--~ zpjlj=!cWlx=7>JU4OGaqfbUQre)7N`z$83M>@RgFpTB9KfFsNf$nZ7=mCl zpjA66yl-N01^TF!RLFF~S-2VpIpy7kLnnpzt&XqZDk@;&djpyOKO9eNCoU z!%uLnH-o1Mk3X83PBigMoPf<0Q4UTQ@yBrFso{NhRzKo8G0cw~$@avP^!=|sN0*V1 zP7|3&Fn8f%GMFQN52uQWqZd!Wro!Wn;fO?hHdZmr{Z1cv2)BwBdL0+(12*e_7YW5| z;JqrPLxr#$b415FEwT_-5jPduf-^-0KEk1=g{x9$hog>VwG%Be1J?^@<9zHkJJ?7< zg~+fA*HB=TQ(*WgE*P-CXOU z1^41i;r+N+_`qn^|KlIEmr!xjeN_t%;w0(Md@jQU!u7aB*!LV?l_0zdhY7!f51tvW zQl0Dmi8J_mGZ8;@KJ#D4m1JOtx)Yt8=&N!>hFfsh+;H#LRuC`bbHJe);oJ*&^S^>q z=Y@O!REhYnd@i`_DmtYTAH(N@+b<9I{vOc#VL#;PPIOu8~EICGI3L(avYaxE9BloLT!4u zcNppdF7Z`S*MuwmEL0b8CXN;@bOTN%?wP2Fm*W~y!EbTs6}E!M@ImDkTFe~r1vtg# z=kuQ= z#_s6f%de#~$Widr^ZdmFqk@^$)1*UQq)!NE)v|*m8-MF1`k3&9SNObH66?PypsGfnVcH>lRX1bqo4z8wC==^INIbu4QS*$+90gpKsr8Myk?{ENEFVMP=J%f|5$-fWR zxkWrQOPQiZ?j`Hs!gwA|)Z`mT=YVZ15#c$g!R?ph8P<_3h!FCe-(iyK(d5&RRhe z_u%&YaK2-Y3KPG6jE~x0Vc)EN5Z7VPDbe@8^(0h~V4nN^jGKfy0`KEee1enzZ(NU0bR0H;BgSSTn}fqRV!e9m3NOKlc$DMKIBN^f z|2-208JbBbC&L6M!vWle%~P+2v$?gp*Dl8&;(#K%T({#uoX_@pp7;$H;WWn`=ds*A z;hX{{qUlKt)jL@Ki%bUom>6#v2eA1x9-B14MsqCcsC@OE4* z{0nXup8OX(#34?LEXDy0GqV`&z}ccgJ%6$Omzb%Q8lK+EIU|E9pasX`DNcb$|IKtQ z3fTD%H&M9%vFr&PuaXvoF+5R`Y2b;_IX!n0y^O4{g$82yjRvdxJ zP=kkK&$uW4Cw7T=EN`~NV{@Iq1ZN1>;ajmephLJE2RapU$NTuHCKAj==L)<>xB;I^ z3#B_7)cN`;*=Hh7)K&AoJXbWhV5?mXmtxaNX(M$P&e*@p%l$ld z@<%W8Rn=6;pZjsW{olBzDqK}LcS`klGYV?$1BpwExx#wM^TdSfA2t~6=chXLT2`1IWPj*tEbF+=|Ui_!G|9#`>BB({3t)21J*5mHKs+}eNEEhP3ZHyWBRwq9D2QZ>4|0ut}qp5 zVi~=N8;jTNL#$n!_`(4?Sq2;F7C!%Rt`8bmO`QWO+`@y(UG8wc8{3;9v64HNdV4(( zzKvmoHv%sF>@b<`+7)xMKn?!*rs=ch_cg*d|JLj6>M@b5U43YtD}!Dv6O z|K6}WTt`9$Hs?6`c)Tmz`(y1K!7sRm0(Cp+COqi`KUMUW?E|A-{dZ6?pv6AGAyrPF zpvC^d?yQfT8d2;yQCw6Cuf;jSU*cTs>6GM;p2W<#-Olxw;~L_g10eni4sEgTf*pGj zLz(=ZPDuq4PGbH~Ai*;(Nw|p&dDznl@x!=D_$^$7J)MsD2iG%kea0o1b574-qU!n7 z`UlQ=#pm<^XI}YoD-+p=;hxn`_lZm1b@T9||che%~rANhalYNxyY1@M5;cCjK&vHWeXm>o1 zV#WU4dlOhZM8XX-xX2Vfjmzf9r)&lHBr=S;?XU`%$wP&o>>COn%=YDnJ?vGm?;I{d z#r6rf`G>x%V7FQ|mutM=>{}`?WB*QD;BPpEcq&Jrn{X_b=>ej^3|#hoUxDfcR=ZqL zfxWm_9MDAGKj`W*`C0$};|+prj>zob6jq_ypG^iIbscUL@rSiVfo<6JtIeNw1xH8) z(wz#g#qoRX0aazQI(CGsP94|J|6jR_^Y}Fri?hKQg(+-2#bg zn7PQ`;&}3dd^HOdGS7~)@vXwo;u`TV`ggp7xc=yuTX(X!^*l-?!P80bo%l3Nr}lKh zu!p%y#^&kxwYWKCxW}NOcc_NPf#!e(7PUd<6o4I}1DXbO3x8ekBmh*3LI!a zbvjPNo~e>1eH`atvwnBra*;nGhASd7?#Z8tV~Lx2V;i0>+=Z*LTOW}=XD6N3{|KT_ z@9$Hl^!Jq5{yyuB{!Tcvzh_VF?@Qx6w(I|5W-9a2Gg%ql&k=dvv0&!fg*&mQ6XI?> z=@~n-9T&}gLA706DsYu>^vOJ9!k#-Tw!a+Dsdn3hyGd9;2J;y1S$qxl3@bKh!#88k zTQYdaDO|Q=^9jno+tdoy|~*YU|m*mxVx9b)5Y3t3`C`H$gVQQk+`oiNyLaQ&4$@emmv!Bqh^ z{t>PeI~;Tsx8H}^_)Dy_Nr$)$cb40F?h^w3<{cBqWj8Xj{u!>49hc^D|DW3vu4p;W zFwD4<3<%^u00Z-pFL-M+?zW^sxQrQ8EsTP&v*_`N?BU<;3;8q2sOF zS^sglQ(l2Tqhf!!;=?kY_)$kQ{t`riYgo^lRfP9Do+#kuv;0)@@7#De8!S7UaZe{S z!>}HwiDBnEjmvD|1g!JxmmX!`aZ5FrQ(~6ykKNP#RQ8An)$HtG@i~5K3>nPKmz}`8 zAS!sq3@)3onMfYSdDu)m^UvdgMfg=*ARKkRpDGmFyEl+fDmqCUuEb{IIe|-?dJ(@0 zN7L&~FaHte&}n0xCcko~pUUEhuXm3430%PTW+M6lud#Nk2^Y}hB&0hVWMO$kx6JDA zB}x6=Ho&tk>>sbgvc*ne*qWEWa_{@^3KHs%iEz^RY&UM;2)!>ZN^#vt8_&gwBL8xn zCA=CJ3qOE6gv)UDbIy}e{rvxJ5_(B6SH1i3k5s^1vxS~Y0obz~lm9%Nd$uzwxT>qb z+0WYiAK+5TOXmpmHDA#*mUrUjlVEjgWGvj z+Idz4zbfP%HboaQOs6wS9KVKJ&WZ4TIE_)W59i@jCmzN%VZyl)eIHV}1m}9o_pbjB zlTZ+ECz9KlA;Lrf+i>zU8~=idr#>V?)jFf5?rL8Ze^i7DbH@3QYuLdkj*z)q&jUp_ zaDb5!s>JbPH;#=^J=}kIGAz&Mism#s?$5l3Pr-1+b-A z_8WGI7W;`SqKu;>RGPEAzcrino>OKfuG5qKRHnAM|F61;d4L2nj^CWiuo4cP$L%&P zV8;DDxJ>M@30GlL!Qm;~u46M%&Bfg!|ARQ4KGJvp-%3KfC}7llCJJoE?G<>Pa5+|{ zlhFd-VR-=mUEJSSUef=7{-Kld(#P-p6O8Z})@wRRhCZkC+bkTgW1B#B zhtUl@5ot(|@V@hj{r}+JkR7<3_(cb}{U%=Mc>ho?N@rlsf!==42|R|o(r*8s%a30X zp@3dzgU3@@j4p^!DVzhn!7Eqrh~$b0@6X%f@&$hC;DQL%=#2Z4h0OI7nC)yo@k%b+ zsc^L8Q?K$=dl|Qjy1LL#tOT^76$iyAk zjDq`d8u^W1#j!6~cj7SYdB1?J=sqfrx70<3v$4PMBHSYiEWsVZJ8_HfPq;z&=(D&= z#&ju9uaCzyHttscBf)=Jgo-DF9+x|Ci>Sa?xJvl2v#9_!?_|c{gCf2V*Hd1UQ(hhJ z!e*5Gg}eLA`9FOcN7$FZ=K*oA@F)17@Qip)*>WyAogGx*98rM}a3VJM4gcWz*qp-f z>6{{yU$6hkBxH#UOL6cD77u3!U*H0>0r>}?!+K9V(}`b;OGJDfZY3V?#P{P0QU2(2 zc@DVJ8)qT(QOilFBZKLsRk%SE_$kh#lbM;%CxKSNp2da=O~gG|S4dCQB|M6)yg5Qu zIKy--kLl{NB2<~<`A={GlEXEl=T{_s`M3lLsW(ROJILN~-}@xb>F$j1ewv;5k4!`b zc@f@6Cir$n#hY*`aCjN3lzI!udYxVe*^BD+O;AcH>%X4qzMJiQT4`?jfOx1arjt zH^@H6W+uCjOD?r0qVFx11OMZc+-H3ri%Ii(yB4f?oOedcBUGMq&abcFp;lRhDstAA zy_}nd^%3sAb9ge(X1giCoYQ-_cT0QN-n-@UX7WL?gVhIlTwf5Of;l9;R?PjEC!6<2 zcz=}&-+73qWHhn4V%p4&O8dQ3(5cWnT#yv3qZ6b!33KTr0mZh)tFPe+#pA4APW-KF zxukl+7H~l(1yG@QI*zWu{Wz6jmE+`}cfFrFfrUlVDD*}y>4aC{1mSLcMWSe;w3~QS2xmG+ zum?A7us^WCsgQY3XyW=mx&u#e$I+F{OAoFExU0g> z$dBM|T%n6)EbPN&^ldX(LT7TngU$4F9xf2^#kd6X?xSb=DZ@=zUu-iSxz*bwbc+r4 zcK zDmFNF7Nd8o-N9HKMcj`H&+SEajJ-~#&bmcd7NY7`YqFk9Y$vBZD68 zI^KXoMf`nSN!(0Nf8$sY_q&i)Kx}^!P7(1~{5o;267=!&ej^FlBEt>%Q!?`)Tm*W_0`g#>EN{aGKGW^w`I)DqRnTGXlY3Y*^0w0>#7jA%BF_d~`{A%>dHO*%eIi!e!S+ThY%9?_(C(xgSi%~TD(eZgOW)$Y6J_s{hd_J7Te`Aex*$E&tl zjkpt=!+PRQhVU|{UFj*`;~=*8v@;&Rj4KG?Mc9R@wC<^HwVedHgVq5R`fq?EF7999 z3kNu7fHw~CYyHf#(r@}D?EBCElKwjwKfo6Z@C^f8Jit2!_!DV8cK((LI5f3?1d`guU|kjwfPGj4#V4e;dy zeER@DFu>3BxBI_$`zQSO;{f|z-oHX84Di$ezGQ%J8Q``3OyAkwFJa$*%>(?$03Vgs zzd|Pu@SFj@VSw+I)_rHIOu*mZ*4H9bKEq2dT@$b1Hh5>>b)&i%S26tbOV6|Uj-BgD zwGF54j8N&s_4YkD8=;IE4zBdHZ*q_=YF0pEK}<-056biUKlmCmD*J9Xy9~L%sGD$> za4s$sUXCk-SL1r&2XL!!8SW8&5(n+(KHKcDnuMs`wgNBXMBxUUA^bkh7jDI6!r$Ur z;V#@P{3q_(&3(41fV!4pMiYgRpijw(xE-74V=4H1Y_7cBIEZt2rjvggPQk}J-h=b- z7{}^5u1>Joej;vglc1Mjy~B%1XvgMeXgS_5HmJgWbSgdl==`7JFg(_=Z>Enr51V_F zNjL+?I`LFohRqYomDt@t!bwhsr%Bk4O$|T8!E{3N#~c2OxIDtJ*0n{zTg6`LkZ!x`A@a1~yPO$&@z z$&&`=4Ri1E9C7o~mrp<8yjJIWjW#^xe{QBy5?tic^T3k-af>c8ynzo2AD%@g{mj_` z`RC$T9Pe!ZFfM)5&LeMW6Zc#YlHczJT10rRn}l+aP>CzB?u4F+=|(EV5t@lN3!5Z9xb=T1aPA%|LxttQc1AU*>dKXvExX|&GyLlSL zDd}{av5Gf)WPV&@T8OLZQH4CO!=9;`_qkOI3DqR%m%i~Ed5_n=j%%rqdFfuflxLOx z-`N|%H*hg-a2{daw1!U>{K$e(}C-?s=d6ivc@0gyVj* zGvkn3=o1az3hHh-0=q;!WG%P0zuM<&8O40Era7?!?pc~5q&l<49^Z{Nuz)#}p(D9r?XZ`<^1pm=`UeYfg zbqH69BOb!T(@r+ z484_ifw8BPP{8R}?@+&Vr%cDmBLBU(DSW)*?}CW>sQ2*Yr}U-@I`J9f-F@GMIP^(AdO(5ZqYD?}PV8w?M#WmJcc@=_lq6O9 zsTDZG@qJkC;LQOQ{sFhm*5};YLZ{!(HR2q%J*Q`r(Ch3#XE`4S&$012*t~QL+>A@# zwoUp7eiEC->4Jx7k@WF=Ov>Ad&!$EE7mioO6r(%!9kg(Xn+z^pBNFO2Gf`l(dY$t$ z&rgIK2UOta0UnmiV1~5{x9YT^#QT{LLB&x?e(j1BHNqg{`n=W|LG)n z-brASb~2P=GmM5VW!MRyjvJ}4J`tW#fZq{bjdu&z;CF?;!v2(Jwhzdo|5uV=KDd8s zo{#z$>rzc>wBfe#s?<5hcjA7Z%YTf|;Vl`jT3C(r zDL${9Q+hpp%Gv$|H^U&h$PSw-+04&{K%DRBQyLg5B`&dB^i=O#U6X7wb-^`@m7OaKgKGhbwTJwOjo`LLoJZW&_>iu6#DwZ9C;G979~c zbo@3PN!;|2O}JF#Z^B7fZ=v)5g>yyzvCG+CpIQGeB;gopG|AZ@7nhU4T*p6wU&E(3 z@%M2z)-!|N!QWU{&^)mZTfygVgy-P7c!-mK3BDA2F4Oh>?`9INCBe+i%{T{}E0zOz z6gxE6^${!i+dOPK!H#dr<#N;=k^+_V1wO{WSi zrV5et-vTBg5g&@P zUmLI3t@r+aHVFw$_MGS9l=tj8egbC*zmIc-|Hkb&iaqL65_T68&--@!IXF~!2`(T% z>z{Xn%_KC70-JGy@Bv&c9C0^OsqjTOiXE6csXUw}cDMyceqcwzQNF*Cp-&RVN-#TTyjO4Q$(K#-@w};yI9|yPWA{hn`_5-l|0njhrVSZt9aHx|8KU%T;SN1vmv>LnjPjhn{gxeDV%Hag06V8fW8N5q}o< z2=B+CRLIPn={39wOa(j>6BYOj=j6NX4i3G*RqUPiZ=m8|q(EB0GgY#~6_^^+y}T8E z6BlChF0+5FpL&h_=KYuR@Tb`GeVS}vh`aD$XZuWASoc5AOAo7iNr?TxPOW=zOSjWx z^y|s18Ai=^lw5{0g$r;a+viiFo_gQMVISH2e>?g04)rJ*cQ5OIVzb@g1`=XEwi}e< zMiKuO2YqPcM-;K1e`vSA1eb{&uD~rK-h`{g_J0+z{-=Co3z)u!iA7W(3%7{)3%K|b zTY+zJ%Ez|FqVA&tqD3yj9mGwGY{IJ5ZvWnWEIt`6Hp4M%x$_Y_I2U&iPp8Rrldi#m zpZ%Y*Gl7$$I2-o>3j)%^a^JY%a_oZ8Gkr`CqJk`PD;g3}QJ7OyG?);BiVh}fj3Ei0 z1rZHIG+>CL@xTNPD&D9V@kT|0ii!~;Dk$pzsqU)o-u=G(!#DnZQcqQNoo`jW^;UIn zl)!^Zy&8oNhd0K;FN7z@T3}@bkA_#G1pWoDj5T48Ye;}_U4R0-K30R@ z!nLnP&%X{Y+!7U_<+Y?23qJwg7^`6AVmxYJixPMo-W4n1Zka$Ve8hFEez7hp!L_eP z&))?vj6MGbyfPMEdp#}wa#+AhVk#cBZ$t_F4sIQ*!4vSxSa|gfv_LF;BwYJu^!%0Z z)>sSP4X=%be+@T;&$Ipyx{;}MYm~tG@Qhd=-VCoLTzA0-@Kv!c=p+~wZ$(0QIy@?> zVd9tYa>5rX8F~p$=oXag-?w6V_ zLOK&(Ot^l2wG3AUME*JI#-n;$6ydPnv4+QLFbQ593%>#G9TTEQ;Ocjy3LJV9DwnPy z>AUc9!e^-#SO`xJS}-_wU4utrdsKig;AOEE=)Vl1iiOXC7sU#=1Wx>OQ1Br@hUs>A zJzc1E#N^G)D}?J7m=3S?3#iurpX1SaM-<^Xcv`H6`(*-z>l%!?g{e2z#6N`h#-4u= zo)&9?9q_#OqV$LT9tA{JK(GI&;<1+qi&Yb?gm=aI_yzgE`%wZtmeV3JAsq`>eGrBJ z7VaJ^z+d6ZW8qaRP)KOuir)K~cvS6-YIqUcJtpP1!$rb%6YhrR$A($2KQL3qo-e^W zW6xg$H+&d9|0cZoCDwmkfL6CMGZ8_zz*M*xn@BE(r+pNKKMubZlaW2}4#IT-k6g*V zAohG2E`A(Ua4kITAFThn0B_>4kqA100k^T-#uAtcH|&bSe+SQv$;cD%##ngu?MzHD zAsq=fd=fo>CA_Z^OW+;OIQWkw@UN%^egyB0$;i#{7Q%G}K9C$MK&MsI z_|qu-bht7&CPcr)V@oW;ORyblfp293C?qfM z82@H9>whukA&9Ur#>?SlFKF}?ww9^>D`^J2UjUL51Uz-was z5d2icT!O@7N92)s5l(y_73fX4cZ}bIy%>KAPmA$>cy5ea{E4+9#s<79Wct4w9veds zzPk@^i}4WnK#U!@`xj9GkAdwNPk^V!_zk$aG9IStbtYL1BMd$!8jBzh`E)$L3{f>nf!P+7+7hVZ#v)xVbI#}OJ zeFEMBYpd5D_yF8N@Be%MnLcHv(tXYhljGf%0`s@3_JtYN2#B~3t?U0n!6Zgur@$U zf_K3BvvwE2t-ib;EFyb+l0qRJhb)tOLzvXGwi>X3}Id4Dey8_*JwVx4%Uau zx5BT%I=$!NeXwrP{c!ab)_>h61MWs@S?zR!C&H6qUBFA=*|3hk8omnF1$r4?84GWA z55pSPGIIpH4b}xX1>U!X^}kLv@fCOsWx3Q3+zpS1bql-&&w>5@JYCY}FHF6#KE8M0 zb+B&o9K1F5{IB5z%e@YN5U!Q$zfSNyJQ`pvG#&1x3t(Ntqu}|lZh^DlC9tl*4e+KI zKLRIM-Uq7+egd1YwvzR@kM+NZhZdr-cw7bRK06=&eJuQDcoVF<=xKN-tSj(2+!~!v zH*vrF5i-~}+0bHB;Aya>3UuN9tpAJgs8=4h5n&_TPw|WJZdf<*H*jav?vqq_-2==E z@G*)vVV+;fUQf;g(vZ3D&m6_R81eUsuYc0wa>1V~n9G|F4qv{wlLv~hPGIj}v4oO= zUjS@4^P42Fq6x2W!mq)z--tFM&DXJd#&~E2kNNEfCw5UVX<*2~UM#||;PElO58gt7 zeA6sXyaVf>tkLlsI9lyIIAQ-iXo0Vrgm-(eas0}$c&sCXT2he{&3R2CEQPnm!XK02 zZ$|Mi-iRIWy}{uvGn5_gRo3Sw#aIlbmXCR;Y(U4J;FidfV#vS40*CfqlvG7GQ<0yq6K)~A9hq|PLpr} zSGje;rD3`Lzk^5Ttx=8ItY>0~aqW|we)GU0a*-J>B!i8xt#}{253XtvgrD&YO)Oc5 z!#3%Sf~BQ(#IsmF;pMRZogIq|^-tE|j3!)Z!nZWxhnn!)O?ZD3?)*@gpZw0sp6{H< z!{_fc;RSH#x1y=}k4?fiH{tzFxc|dphJN~!LPr0P1(+9l1bj0*hz#}A`xJa6tf%JB z;0dr^PW%47S>gvVo&XnMy_U>_^-tz^=cl|xaZz3HcXni-zJten9`NUO`l#P--iwzJ zcuIy}1-HAnE_?;5`5yXkL0zz0Cj90m8I0V-LFFZN;fDf#32%V6s`Orgmt9(ysA!KT znk4XP6YjpDaScW{;j^3Ybxn9ZJinrZGQkLVgq>BTF8VvWC*!f07SM;wmq~s*I^kFY zPlG*bAcy6v@D0S*i%YXd(VAgBFARZ45nuE7;mxpKye@;czs>ru*W*9S2qbWx&H$du z1M(*`Z1z~dvK=H3flnk{^Y`JCVqAg07vt6Nq8M+18`=NA!Q%iCw9YqZW8)@Yzqdu= z@OOqJSkU))0 zfErGN{{ib7UJAby<5em?(f#;8`+~WiaDBq@82o6AtG?uQiA$mrma$**p8Zoq@J}wO z!Am5le{z`YhW8TQPi4^a31+`-QJ*%zi(!3gb{^aXo~`1)yr1>|+Pd%s-z9|WpG^P0 zCn{((JfKygcZhHR)+$!pC;4h9EPt{^tgp}yuCGgMAssm^JATb^eXK^`gO?HCl<}$1 z_3%=dnc3&b2bij1SqvHORLDU8WQk6KdoQm`)XEHqb{%}-yV0n47|y|m$^?k96TTEa zL~*C5P*Pz%F&zbuT2U9As`12+;m(8yKi;!nfX8ei1V8qH@PZgGf)~a3dU$z^m%;bO zcqRN)jMucev{Ke zHar>jg%UmkJ}G3@|Eutrj)xYadtm*OUGf|HZ1bO@_5Xz?;cdTZk+_2A{Q}UZli;gi zzf0gn@HH{s6@Omd|8MgQTPY&wnaYBf!15>i_;kg-(7?Zd^-mV?IWky7{K+yt8Ln&+ z{s=tpFLjCWgiD!f_AGnD?SbJF`RCi$-=ZK8p+-hPs^`I-iJ%vw`{AK*f0e;L86Jy2 z<2!CL5w0hq-^2TK1t?H|*4X0-@28$G!Yg5J-Jt&v;g5L82mH+={2`nqf*v+QnpGu! z2*0JPw{)L4egpRCY$!u3xU=&UCEOU>j@U3oJMkA3&6E+EOT;OogC_%%Qkk5w7=o-@z+m;fFlWr|t>Y8c-Up+7Y$z>F~TA?EiHWUxmlzM9};f`1%;X4X=!G zn-_u>kS!!@Xu<6WFDX6))<4<8SHSDvi_%{UZ+fp1dAy0o)>wpAo9Xiyr{JM6J`Elj z<166FF}@4#9pl&GdpFi4*2$d^MehD06{y4_jKO0@jL(G^#drz4EXI$)b7K4nydcKi z{y~Pch+Yjx!}=#%k2hiw&WEd?jS6rPyn}E(j&Fm9#=`G}cN4CM>FebEPl859(a~qu48Es}? zfVUAYM;-O&ZzH`)f_T)Z2Yvx}<^kQrcf(aL)+H9I@Znq8kjBDKg_p$m3V0Q)TWBr3 z3D#ZoCcFbi2&MglF9*F9WJvlxn{X`=^zwQdd^fE7^h)?Iur|$J+`KBWP*(s2<}r9f zjExpmiRCdq8LsttdZ6*#O@jI-oA@QT=B21bj(D5pnGCgzoD6>eYoWRf)<60D&2NiV zuF<#o*0;q#{%zJn5&{A=hq4_6d=*L36P}hO`kcXN<#Ijs7PE_)vV6F?x6f*Y zUs?DZHa`+~c*Y%FYTjd{6IYHDnd~Ik6K7?OAzd!OIsT(a09L@W#OkauspTe|bH#pQ zjr|hmLSkvL>;FF1;22MVTYnsN!hCo`jBkZUiL*u+LpnZ>b0I-Gsr~PZ+ea9EE2n%Q zn<+9V{~TTe>wdfw{wu5n?R9uP9Mo5S0Gy!%AFt{-99~QjQ;JW8x4>z|SHRVjLY6*s`+w?}*)eD6P__^m#a zMGbyZ5c|XXKB`mijfzK)G}2ve!EfrWs5hR58$_FtMz0Qgan7KB139lsWP~%)IA-7_ zAF=B2gr1RB!R=t(yf4AMcZuJPH0mqg;@(S*wBlFyF@L<3xVlNF!D(187~gACmAFQW zRP&aJRq)nNBg@zQovHDZp@~{5)vS4|#Mkf+()aU5)xNfSRpKewKg4L>oGZm2i{p+m zo*#P?87==L8U|0mdt-&(0}mx!kLljKSo>jJsd4Z;amvxgq{@$QKK1Dk|4Tqpv_FUE z?2h>2PgwRzTF*zf!&M|TNS2xSFTxG55`)A6_;OfU_hk5>e<4<|*5*%w_rR)+Dv3+* zNc=1GNUVa}!`hhj65J2g349BuVXZdQecCK>G_0q9Y4A8$uSpg7Bv|Vycfd2?VAW=k zco~ngViDvYfB1120b>}v5Y`#~0A2*^0$m2*4C?}~f$xI#zPPdFJSwNy2LhWAo)ZF${K`9@9OvUVAIV&8>+(3 z?a89JTPfqjKfG5}VldoWZW3eySK-kRi?9bC4=+&(T;97Xu??T#PzZ8pTH|& zZ8o?cUK0!dQijJ0;MFjd#KJFx*TWTU(EKYNkH!+bx?fdd3r*?^5e0Y_?)+t4c*p#Y zhgWf4zst*HWHku)iN8 z{KEl_`GkRud3_VU>+?qC@ATcXjXl2m;B#?fgYod#7GDtY-_htB22YFC;}m!itmo#- z;p=1Jcfni4(y_*Al{avD1nIfA<(G^@SkJvCyb{)P?`iN3SkJx39D>k%8x50BIw1BG zO%Icw?c}(k7GOQ3qIYgEp)rE|QIkM`tze?&?~VSn^d}Vw!5?U-Yj^?AlMb z;?y9TmvB97o`HA4+f;bX;3~gDpfB}#xVLUAgy=T79qdmu&B=8`UE>6={8F?UXPlQ_ zf^Kj*CabL~;rHNK%_9C9Y2NT%U1FmO|HGH!_HjnvmJicHbHvl*j3X;cTURBDS|32E z-rbfVO5T3IP!l& z(T)TV&`RQz`XB?Dg-meN5DLHpx&S|i*Tnb<__bJuZH6*OwWv=F4H8To1<(4~kVK72 zZy`L7_^#r|;PtRC9rAC)v^oM)BpDp0B20is!M-Js0xg2)!JZ25xKGwS_{kwW44zk2 z9}Fq6XPnWg`MLW46m zywI)T z9Cy5Ne9KnfFjI=9$J5j)oXdGc&gOEncIr3ciQ|pF18>BC-51fK@d*4{jCa9_FGbrE zjER+Q-;x|*`ijr7@M>6VLFd9x!CGrs0`G)%_dd+m1ow50x^)2)NCVZKWuKcq9?D=#4b05<_A6lL=f3UmhipxC2pL70zHS z69?c?o$7?|-0?_%Fj_;f#v^*tg>Tsm9SQ-=XE!iv3fKA(ejL(Lu3}+d!SBcd1X* zs4^adEDw$G3YO`~uv9~29Y#ASh^Tc=21Bs*H z&ildy60_ktSnK}R!5*wLd>B3s)&>3$J_YudL1}~QT*Xl=9-hkZ82ABLD>Y}sn_<0s zxdHwF)&<@Ge+KK_(8urrSnub$wqzySA3Z-B?gRVj%k9-1JX}0n3~@J`vUz zVm^UOu)aFjy;bwX!r1d;;NQS{KX)Fy64vv`Quskwwy?jw+K9)-*aM%!Z@{_$JrAMA z>H#SuW8s!aneL*wa5XF!A{l-YJPWoIx4^8hurEuVnlIb31n%zYj~VLEpjm{+HXhIu z%k%I7A}k>R89tWzeR`P5718;s?`>VaAhf5W+!PPda}(rp@-^w&|EQ^KJPvF$csm(~X|a zBHZ4AXl{7`o(k(;-VR?5`)z_07>DwgqC}5Vj9$$=;hci4^~OU*`4nSVhc5`ZK9*8H zaoZ`zVI7Zd$0y-q-m}|@S57f5ZGK-n@q<&@SalLtoN5eD_Z)$?Q6H_&lVJIn{K>Zc zvC+6y78~OIQ;kb2f5yM+8zp3v?^U=RtjpUh$;ZY?N6&nNvSZq zjEkq7iE}YQBUP@~z*}HF(HKY4@)j*m#pSU48{zsVvw96akVQLZ&)!_*PB%JrH9GM3 z#lDSpd>Od&cjBYd*+}O)h*oD9N4NSdezo6;iDwvZ9D6ibn8bfd7J<&Jz%{TQXorm? zZ&+q5!@q-@!^#4gc(8*g&&2ruN(XTz|5oZd%CrOFpil`5-ZoxtAmopWh49D;5jVhz z7*B@V#dsRrJ;pQOniv;hJ7RJ8EaSxH=XMkq%regFaxa0MPi7h;4|(?U1-w=4pM{ma zrW0Swpq!)pQZ-LZguMr{Ib%|@F7t5D!c?RM_4n{pu{3Y|t?~@ctvsfC=F=h^?ueey}RH! z@TfpB@01vQEPKGS>iq;|guR`_`vvw&9oQSs6>W;_m5#)@m^8J(mEmO~TQr7ry$0v5 zSk2bMgPVzqibnkpKEQ1@)5jesN?mA?7#{`CnNy#*UJ4tHxdL_xr{)kc4qI>w#b3gy zX5uT-9?-ulv3|^aE1QYfE8)4s)nn)mc$%0{GKM%W<6K0LZu~?y{;qY5hrpX*UArH^ z8^r1oJHg9vUP|q>>a+%40_$b+RT&l5mmr&WXW5O#KLS1gOX>6{0XR!me&N9D~TXD*=>F#|V?m$$nH0_5EgLUK9_G+Fu2R>9~bpm_= z9H@PqB*V*Kq{lDHZSW>oD@~i>1F#xdJriH!p?|Wmy7QL;X1Ag2;?HLq-73d|i`zyb zG#*|E>lXVlye7uC!0TiDG(4Z={MCY5egI(}$*j^|$87!5gFSO5%Jxw!{*+ z3Emw=NIVXAK6GecZ6Sl*@MKtL(5o*EK!NeljXggZ zUJTc&^nVK98-;gG`~i;{c=S^do`W}v31@T6x)0~%SlWm8W6KodRVoj zdzN_mY@=6xCC*hu)1v(X?9trAR1W*$8H9)O*dK9$wGw^;dY{lRg}w6Ofiv3gN| zaojn^ur7jl8}Qe=jYr{4;+N-OWB8g!THhFH#h>&S_n%|jnd-wNUAv?{e2e2txcl$0 zp2*f^jvhU}DzQ11Ra4?3Kg3~${@Ww^$OX13MvU|0*xF4%*$#15}z(u6(L z0`uTSqRqMV|ARQI+eeS?fDB&x?g`hcAzw zFDKd!ZoqF%BZoVo`=`Qct5;BvY2w7(QEXm*rONGgJz6xlRX;a&2UYOzlL{< z56{DxJg|;Z(K*9a=M0!wmAFbrMcmGW=f`+8yac{niDQpR7{WUYO}t8uQamq(rxNZ9 z3p|zd^-s=@=QidR-(6iNZvP?IFaB63Ug6&^{p;E0cT)0B4@{OUddx*DxBzG8&XM3P zhkJJxr_MEcwt5D)*I8VIyXEJ&$BU(NQG#oRG*6t$BeD>3VVML^kMRZY<***DE8rQh ze|kmyP4KD*_LFGBv=N-q*fDM>LDWS}81M=~9_yC_Fn~VvS0%=9`WcXRab%B<`FTlRGMuFahpNoa} znNpSbhvo(%%*5lV*aIuz*K`EJ{|Ube>l&VMJXafHTr0-TGft@7je^{;Fxp>y23L2D z%HhzE3D}?XWVvXF&M_WJy|-vdAbcf!Ijk*?@538o;g2)-u6?0i-zlji227v;u>@DZ z(_mjIl=Xmr1?vsYa_Vs&tTWgSuOI_|Wg~v=33LRkpD)9;#P`3bNBHPrvdM#ARiYa= zQSn$s1g*ec1+NvWe_~APe-F;v3GzFM|9^!3*!x8akB98!t;0mu3)p1sC*JIC(OP%- z@aBoLVEx<__$AWu%ZTq!;k~e4NmjsB#P`j%gg*<{!aDqO*oOO4Y&p6QGa21cxcJKj zM!%L5@LVHazW`lv9?r$xBgOawcx8-FPoW#~y!^@Zu7b~n^;Y38@Eq8e9m3yM@in(e zGyG%mZTQDg{KFG7@tB9l0F}Yj@G@9e=)SbL@uy6NU#GPEJXhG|6 zKG-8tNB#-7>lu|e=`aWP6m2gwMpUx6cMwzg7A11SfAA~RL%UY!P06dhurmOhJoX8l0H!A)aJigb^#G^s{(TO4j&_B7@{I&`I zwF$r1gvG`SjZvcEBBQ$FiiNy9@Xu)8TJMVTMaJ

5~{XJL(f_(Ys`wE{C`5u4l^- zu;_e|VOG!1G%kqPauEqnyV$7da3$|s&D~oceyRExamB^P@apn2%Iy zqxwHi18pIQdpv&70eIv7`tVQVY#brVml(s^TznZ{)x&>@cy57_sh)delhUue#HbNf zmm1a8t#+ZieHE=AV&f%bHjSW~?G0>9VnII|*(8=6puxCNM%w!a2Z_719C7*z81D&dfMle@G9ajpfzRqJ@DQgyvC)%k3WV6_zUq_ z8D#kP;iqmN=y#0d=i%1y20uOqc54*V)pPa!y8tr6Ja{*2=WLbWs`2czSsTYI9{6(- z_#=PeR`HGS(E0WL%L{&nS1_C0z%;DFw_d}yXeS5LRR>Hr(~vg8JOsBPNe{fZ-VFL0z;&He%Nia=xOzdg)00faMkbpGxdt!M{nTK`Z$KK%3$Q}a;c8^ z7I^aYd}&vOFJ6Vv-7+YQf8pxpiJHE_2drd<#{G1OdPP|BnGaxujq#>+Y*2mXfI&tW z@Ylu>e)%_Q6nkLj`o`fC9&XHk{5vfci=TL;arhaJA``LjzdokI$=@$PkH^`D#3BrS ziU;lq{>-v0;BffBF_BPqdYTL;)hDJix@GtX_;T){n<_nviEQpqf+GqUz7M{a@Odh{ z{!?~~$V^2KyTy1+o5Ux%RUh5Gn?AfexDO>0=)0E;c|T;U%CPenFhbN>@lW?L4EX?- z9;QFokL~DzI{$0S^7(b}dR~m%qSEjB6-q#j~Etsy=`W^yj0dED7@YL%$_H!+4ZxfmY3#uy5m! zoaiRW;SsOF6MQsa&VzLr)`A4?YuO?(>RHCE;x4WD8pD;rWhR-y1@Mwh`~`cJ!FJf= z!}&WE*B-)0QD2HiS&Pft%60Pl1oLx$lj#lP;s*A@l`AHbFccpARS{l8!3%yQ%`|o@sAwJhwWqW#S#4diCFvt!y2c*xMCt?qk|96%M$%{Bto;X zF0nwhfOizHX>Z^STP4K@;MsqxOU&X3K*qoF7&73M-%)B5Od3T2uI8Ge64LA8>DLgh zc;IOMgynDQ5^L44tt`Z22_GL=sg}!okL5ct`~{4~ssJaA;cE%J?xBZOs|G%55|fb^ z;lVNPb384Ui59afB*(%BoU#+;|EfD}E{xqQg%` z$hHo|`Wv*sRqň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

01xml6tb zSTfl#u~aBKDU7=uHE?iJ(7j4D)mpfe{A1oykK$6Tg-Z=HEObvBBf80R6^}Da+NFT# z>V6R4l36WduV|Gx@?#jL3fZWnUYHrXjSk7t)n(J-xXCWKbV90#ihaa;sHcux2=aNe zY|%c&d`7(Zp0q#YIF~9}#k83*SwhR=g!gGH$8<`Wg48jsG*}ra0mQQL{ciI!#EVqVz|W$l6TWs@m1GjV3E_G9KPDXf+H)| zeTa6UCdN!SU~!4m{aDuSHhORvjqxE{%$dx$<&-{x<7vHU;8LBH2{jH};+p+|ZLZc% zr!rYHg`JU8JU5)Oh!f`QTk=M8GLf?iY{}TTVblm0H)5&|$E7r&OsIL_3iLF2&h~?x zN!PJyKrAu%>Zye|N{n!+ag0kz0G1y$ec=krq}2~;7ZStH=`bufMV~b{I7N5FrQ3~G zXoW8FpGO13=2p%mXKt)Zj+tC6Fv~I3(RFNI%6i;l zQVJVbuNoMQ^rPWuz%Oi^xa!JKrVlZevAbul8YLU3uC;kK`Y8uX2nSC2d`1r+%ur#r zS!s|OU7boX+~v}ODwxUV{S)nA*{CgJWabJ0B9bw=^r7S~G9uX+k;LeKF^#IGmUbiY z+eedq#AhEG4ZWD=OUQq?;| zh@s#g>=fh_>gFA`b6Ga{<+0+9PeV%(k)$PPxQ)q+WBWoGt4G1r#(fH_m5$I7B>g-w zdbiQ(DAn?z@rNLFn1f4eqoMIf`YAz^#vgGFNpw^)h~Y;EiQHkyh6xx{n8&hZ3nLu@ z95$n#1w(5OscOw2wDw3pUAACF$)~Ig_OPOVfuWq$il?&naD9jKHIx2#x#Z*NjYDYd zAw6a78HMa{N5Djl$+3G57g)CVa$L!IMO%AtC@CZ`(3P;)h?Do zwNp%-7z{9AsJ0AkK;)x$Ik>{2s;zAXQ$wc2v6LxITxn&jz z))qfCrQnL9tu&Ct+8dMpR4_8NWKh7Y=OJ{~>6buhxqBgkBVi%Z$4>D(|mW#AzZ zbyg%@O4>qGk1g6iZ5-LbVwb~x4_6+ANPF2>ar)=nSCIEMYE!KC=`?n9*3AMsVc2?l z*`#-+o;JD~dk%&d)8(w8lwu){Ov_VfKrXqYs#u3(Cg zuAp0`%N8rX;N)FS7M^2sv4Imqij57^Q!|!~6|@5`B{}o+w$BrcN@fxuZ(NC3CL}|tj9@Y$xf9sIdSFJ z=vNpta&&XL%soDCeHBF20eQZY#nhO$I6ZMJyI3xZvkqYYvvUrkLQV-qE0xZP?FUe= zEEYY7qeSd~oJ{4#Q{SLoVTZ6YSxo+1yTe3giz(ltUUA*f#VSd9sE8StvG=XCH5Pe1 zg$3GT&(6)5s3OBWlnicsm6+W~H* zrP-UK=c}<8ntJ3DO6V}hs1cYBB)OR7Dja8U7%56FcR#~twIqk898y7&hc-(}NuJ#- z*?W+dsbd4!{ngIsliNEUe(d z0|ssk()kj$1e4(rJ*y0Rj&*}P+2B59hN&%Ernj@Ur}hC9Md{DDl;uvk)C_3_CmS|b zJD69C*cVDzY?dw5SnllT-3YPNx+h&>s%o1k{leUpVTEfM!5s;X z7>e9HNIRCxk-3&^D>&Fd>v7RWQSzmLXv-?;se=ttk=N&{EjDd=snKx0ffe1qiW^+i zoRMW+#VU(h$2F#uzEkC}YuAFK?J4-FQWEGZPWb3W5tr&DT&jY0aC;LC1v?sQZl-{p z#LkQr%MVF*sg^cR640{;_p+q|Czd?P1kUiH1_rk7LR>C6RDcph!%E&+H~2!Q+Z7;dw%wZtGR>Ikcwg^)!%MpJvl6~rQ^l+|l!hXgTX5esWWh6Ukg~^$z zdlp+!n78g({B#ZIMrmS4cP`3fUeuc$b4S?C*pkAh)sC97=`{vdSOB%#LN)iV(V0bV zL!~iemAE{?RRY~6fgRT4Dg`%!&8&?hkRNG-mMcQF!aBIG7yVB&xWX=5)6_3kR zvQ)Cq_2nuYO6Ca++L~)rYAVI0h6^s$psqhV^h(>N=j3xtnuUTiG=({&T=B zdt6?dXo%;DRPW@mhZmWF5qCG`-z1J|t#(aB42+GnoSI5g7s^SQmCVwk9iyCH7cw)& zvI>6aB#x+d3Eo7@w#%Pu$d(pX+|MbV{OGSx;8$4sz#%d>nh%WfdcfqhQj48Dr=e5HN_n_E~TN4>;5O68nalb)O>?Wja2SPag`O5vhAhN5poVDY|ku+ zw|gYJ-Y_!@N^=LB zlXKH!Jh_x^%I93k5`f3B0gMCW1F)meWT&g{B zsS@K-Eh`rP+ZfkD9=33amaQkZB)PsgRxId~?9(=UF1|9e>&1XgWG;T0o~{yhDxJ2! zGIwD6l1iHhhzy!Ve$@$%@$548LZSrj?;JzGS8gN zd6=orXDO~aF~wlZO5JdpJWY^qlwqBv>y$q0V*T;u1c$#vWyQuBh`RLCfx*&^Pf$)A z%El#Kz8UT0vd!z31x`jWR$>c?a!`ULV+I`|U15SszsFBaC(;$heUl!%`~! ziAbu?aj{*wo7X-M`^e~C%X@6h^Sn7&V!Lc<3!{t_Cc%*_X8{9D4pPgG#s65rys}aX zWz4YFc5nvX!L`vYxomE7hfgZYW5vY7lY{&VEWSk_1&Fs@JYHnrekV#u&_g7pM1~c; zCYd}!zG`K3qYtnaIlT46ehXW)iY%IOg{v3J3&)h$p3w5xzNm2{QwoYQMjlRZAB-!( zxgrLhsFl^)??zX+aH@{vu2mr9cyVa4Vn9+G@TEsEBHfg~0(8JK$@LMN0h#8)CIpd-wjN*6`wt59M>NOpJPf+E*QH+)kO?%T)C+m*uZz-eI_g*oUAhA7dT-ad*dJm zw(112=LMsItKCdzvN6(GUU1Sk^C^;=+NDeN1ui9d^3Ii5F(}z-x)KsRlrV9nDy*=Y z%}GMtsgbTQF*TXvrzUgh(&+^^5IM=pU~*yan??K7SNe&k)Gg@>rYY&tZK&sX>8A@E zEcLvZ$o`2TN}EV!LUns8SnBOGb~^?R_X^TX$Xm zs5b+_#9qrOP?n2**d$d37=vV^%Ym(pdN@>z5g3ecX($R^s*~_j6--N2e4NAeK^JW% zjh4nBQ!5OKX$is=rmKf_I@q?CG8x_>UWZ1zvV1 z9P(=!C$j3I(B>x-2x|}=d~}zuPvkhewz!y)^0azS2LIY-+&(c|Dw^Cq;62=wyknyD zK+;i*iF7G3!4;;hGj@{UVZzPB89o$HBr-!*O-$DM}EY;NCkD-!*a*T8vUQV%>V ziecAji3~4!Q3AEd;PQeicXAf$$&NPTax+sNnsWLcNei2PX2;qb*NM3{$~9N?d~Pd+ zMe@Qf4vtSMUWrLBL&1ufJU#4Beh2qLr9aUgTvT5=|JSIMrtj|$^XIz%HSYh6Dn7z8rKtMOU|RH@ z!F(s3N@4JwGD79pW2IYJ<$Pzb`1;OZDVI*QG4!3m`s+KRJd_qGeU%#NJOA4X5$k_{ zRzA4O`JZk7q(&!zj7VP9!@;0|63R6Sm(Ty` z7x3BViARn}R@(EH0NN*eT)rs87c#`Jk4*lu2bK$t8n7&J@a>v=gU#BBo!CUU_v??YG&V1rK2l$EqUlS)?dSAtnBG6c2eEEMaqT zu~_mVldaTWwqxSN3CV@redYFXp10`))Q?e2-=6DE;9Ph0a9A4Vw?J+)1RcWBq)QWeQEsOh+d>_Vi zMfb7z@(x+n=8hEKtm57(7entJo4mTcJWAvY#gZ>ub6H7DJdO%-no{sRvV}Z-q;?&c z4lHs04BFLZE+GpVpYKTVZpngivQ>E3*iOmId(sZ9UlEq}hM-l7d^@2;UPR%xWH~SH z9M4l6C2}o{jl0Jye>7*Xf#E6D@4QFNu7!K%7;Cc}cZh8hWDRZZ5~esv;?A(kRXuUx zL>fy91Ko&ioNqL7AfwZ=M8B~#7V{r3A#l3LO*7sa@x-4d@lc*aM<>Ng%Vt)-(5|*? zQou(~=b>zdm#El`a%BmFDs_2lGNsP(wI^O&;Con@n|ReQ%*mGk1dnoLkY(;7Tioyy z?T@F>+$PA$+sRx(ua>3R78dlY@zUrLG%+9Gv9lhZC~#k)14-HB50cxQpTP}l|Jo3zDHhHSCn z7%4+JH;3(nMlK;T+^RYHB(matRo;grpBx`E;ABtNkT*c&z^~>CEmu@9KG|HS;$TS3 z{T{{6=dsdp2cDYpVq_{K+DxMW$S60LITGbv2t+?t0AKRClEk$&EDzj%{On@2J3N? znd^%3?ip5kRxNZSED^y|yd6MGGW_`@7~uFQQ||IFtg3!#c2UnXX5$9~C_ z7Tno5$OKpcRwliXbSCRFFT*iKvfBS2nt_olQy9Uy4qvR{swAJz<81!mQ{coxK5xr! z$xwa<6&Ij=;W)S|q{X|XWVVt)a`GHlA&x0!MLf9YY5jxm^l*>dR6aWW4*@|w`mIiS zN2TShVh-wfONYzg8GmUy$dX~bN5s4lEKYomupr-dC~-D?@NJ8|xkT^EWq>cQc}PCz zO2I9>gDisUmtZ7jYQ8sS7Fcm~0 ztH{ipyq3$me*cGN5wNpChE&OpcE8w0$CX!B9XgKtIuUFUO&WIFK z7}PFH-J+;CpdyCV2nr~T_-Gfwp^t4TLp_$QWtBo(25k{>Xhl#4t5vip>38k%+;i4G zYu}r)p2v94+H0@1_8R{6|KI<8shf0o-i%Be?B=}FQ8wRI*tChAT=5ZcMIvD^WY)^p zRz(x4+PaBY1yEVeCl}hr5c8C?1{)m7SFQR+FqjN3o_L#FxiDs#w}#;B`ig7@4$cPY zXfT0>fbN_%1kN}-3vL|n;2+5?&p6ycK%wa?s#s%LOuXQ9?r!)_x{#IjA806w!H&p-gbvp=GYL3m9Yujv7ji8mKQQT1x4yBv zPJ|gzZi?tf?7fWaS;(Fdn7ekbfbRTpwCy?Qf^BoOF@*IrH|z*Rr{0i%MF(5#=o|Deh!03VM5N|@Oik>QPNH42u)Wf_nr3MI zA>Tp-8dPt{Z)v7+PR$#JUy!WQAc*AW?Rm2F0?=08rxK%ZHuhHIERPJcH!pPl}+R>J9nVlM_)nsi*RPy1)J9B8?^gRJzh?J zm_m~8u>iW8uPB_!$;TUak`3)Y0kACZ8Pz~Nf9VAz0t0Ut z_kxC<+&|Muy?H9-x36(IC0)?2QeW$04zPTA`;e^CSr}_Uo~e3)pTqePal5hJW?`%a z+orh-+&|d?g9Mh~Tpe$%&9HQWZPWaQ@CC_&9x~R(`agm#Ht!qa6&c%=vP!iUn6Hm<1Y2yrJ|M%Bv@8EA4R%;wkmvqS>?nCd{sYprlchJt0`rHX zJHfu0uji1p#O<1e1r`8nlNXG?{{x&)-jM%V7;Kx#8^&H;T;ERag~25^-(vwy4fp>bsVwIkqRax0iCNfyr9fmS?;D_dQ$Yv9NkAuvn8UbO zZUme%`D%cpOH}{|AGjqrH%Pr9V?2M@RX%fVVFN_aie0J=(R~NCEm(A#Euwv7wxH*L zSOsVVsC$EKhMcV`2eG!=CKw!$djLmM2i-&#K>k1#1iUI%)&Q>LG&``^^*kcFy#QB| zs}b^%ZeimlqVO&$LBNclz9G9Re*=Kq1Tpa{u_O;=1-A!RGb$PRYak}2x^Ox=JU1tWa+GSYe|N9;c#moNFl40N)4@Z+YLJ|1<$C zq#xBK8qW=(ZxwPCbPC1*Xaxv`LO0?5eX0ScYBO+<~c;ND0;zKCUBI?yz9R zCnu07yF&idpbf~~F!|T_6gDbCE`T(kg@^{DVibV>aj4PIMmj(d;%fEk1>jt*YCakM9K!G;! zMW|?J1C#*u%$hmB1*@2i{s~kxKmtR?^<3juLMKJPM0G1vTAe~;Gms(h$?yhtnt%{P zsAJBTf$&pX{YJ9M7-)FbNJ|E&HH%Lco)w!>hJ>L*sRDw3B5QdT-waHuY6DdS6u8V; z(%8tUpG6he0%12gO764MgLSJ>gJCOw6#+)4wyD*#A)*4E3c~{y!7Qd8i!tm4M7R~j z%a0H$gx9k`{{!cpI9bRiLPBOZjV%Kb3`z8&^|-_1JMl-C3NzTSIoN} zr2TIC4~cTiK_mu_=^A;rvp@({<%8F=A*0|&0wr)(8(x)Ab1PTt0TY(xZM%XqAz%sx zHUzkMHoJ!#PD8+V93~Y&xE=7!y?Xv*Mc)6;!p6-As)7oIhXhNa(hQZ4a(2OvY(FIH z+y>D07Nn_27R}~xMh<2-<}3W&kPGo0VgCcHo%<`60<_y^#i0m25tGR2wVGc3SwJpn zP2P25p$xeRwChTgSrMgyDwf;7K*B?nd=mu98l0JMDv;W6_ZJK2$eTZ2*x4nq7Stii zFED2TWS)gN0NywEEWPZe!m`n1j2mw%Y*u+mGmMzre~-qa^kyoDZGP{G7-1S_=FQVP)R6Ajv(_xq1%LKlFPLDnb1waGl?5DeCDw1 z{>Ue9F0A&ARmYiTVQP3V=grT=%}HY~8P9A^hd1Ixi8N$#y+}UriNa!Y7ou!qz~A}5 zLd3tLVCII;J?bs?U7X^1LgMAHFH!&0WAuPOz8&|G6)N*pkz zTIDsj6yEG-?f|C8OR0CoSTyx)4HxxCmT~In9WFakG>v)~i)MXshyg~b4G=l`20Ms^ zhvt+QD4M2L30{*`DFtvdD0RjW=vS?+jeVQq(7SG!4`h=bRORD{%Y zFupox;qG@bvxajC|53mND_%UGx^b&>* zJ>5Y=r!Yhlxu5W(%x&09b3YUD%Rp6{{}EL?S}`NG$e8IC3w@-h-QmF-*{CAAyO78> z*II!GL#;v8v=m!wd{4xA#WSM|IBWezWFkD1IN*4XKi-6kl>!Ffuja zTVN|jiTJcG|2&AOP%6pbvTa53_zwDAsrO`UcOC4-eDNG%L1{uL0c=U+>!P}W$=|?LV zdOrX64DNmKMXMXX*C1z?Jd!X`FV|8kMKQQMU$hb2@XoKObShZWs(49AtDeO+Z?tmL zO_2;r6(v&KOAu6%-AekmqIt}{d8Lt5<6u|AJS~z4UD!0q79(vIuBrU*LR?h&ls5z_ z!ezYDWTA%4Qu)3CgmcRK=_@KY&QRRHRd}~k=dG~^Dfq`+bZ{e^xsO@HcTsr2i3V-L zMc6|a#zxQ`h1^iWAYaF7f^LvGh>glzqK z1FdM(I?%pSuBxvdV{B-nmO=ROg)bHUa16=i&wsN3XMyA{G-q^y(64VQq8>r@3{ z6kmux%onn*ef}Fu0mLL&wCr(8Rz>jyLv8^9fT9b*`3}bmORU>ViH(dUQ{!u(sIRXz zHM$1MW)w|qXLHfy^iGQUS^Y{)xTI`W(PSeqmQ0MOq~yg}l_odmq-a*j#9%U(bTVel zZ~KMillqBJl@Ba0uGsYvvA_J>qex}=4;1Djcd2L%I%Fq1unE`GbC&s42W5d*9%c!6 z+>ugK4(eK^tMXkP<*(!>Scl2*zb;rKkGw%Fls8UTmVET1g{AVZUnwl}jWwi*0dvvx zbDP=~N6Z1YnX66AEpyTIgBx2Ae8wQT)mUxnMKc#oC#R_eDxuX6!5GGBQ}=_pX#N&d zyaZfnt~USB26_(RZe|(-KZOMvTaem}=AwCLqHmW{Cy=??bm^NqmU`F5){3vdE~TLL zv1Nmzc{@g}c|I86N>y!oUK?AG`a_LHQx{EUQ9s$J@-Olfd7D{nQmbh#_yb#Idajv1 zZi;#~wjlLrX^Z-Un{^5Z*OnbDnkL$qizb(KO;N}N2CGeTOf+SOisqk*>HTM)7Zd_vf83q9UJXens7Bx zE9*~NZT^l0+DiF0`_wU>v|wwN;gY7=BxN&;hKBhGdV?zI2|!lRgs_DxO^yyWIc#^> z>Ub33-vgT{kNC&J<6HEVB>O({f`rc@s%xWN3OIw%R{7!g zi_Jx@9*_#QfoVYFf)c#{jlwy{7+*!tS6o}XSKjkah55d@bh7NtMUySvTr@hXUU5mu zTsHX_rlRt?Zx$vm)_#igZUm|Zoo4={gqr}zfOYDk#R*|k9k^PhTuKdKV^QeJvhR55 z6$^2b9=I-uD&gBg=cfy4I$#WfGcH_Pokn`cGnP!oVzA_-wo=%4Zo9g;Sl;|dp}80) z9puRyHI!D6QvzZ`L@52)*Zo{dLwkcS)4nTB4L27}%#^gKpD`|Jx^`MNtEhHl^o>oH zWnAmBtS=)U{B~h-6lL=4w+pZIyD&FF>ezxm4Rs8pJQe;HVzdTaaMfC~SxQ+2%tez` zW-J<)Jf>tU>h9VpUV)1c;1Jlx4j3Y2E7HrP@%i+MZY+uj=mRJh4zE3V-*+S#1AGe^7M@L58^OERt4^yFceZ3KnXa~xqBMSHtpoisH6V@uj8r>RtNhu& z6yD^k6G!oip|cJFTgYOWudB)YHN7a^Ek;X1i9BQcQrd~pvO`5v6p^uL%J?x{)F1hR zDR;+k+0mkj@op@dM%ZQ+JwY>v(yf1HSxwQJeEe?fc=@?Mi-O$oy~0gJrM?9hVHIpU zkk+0&=z+pIi>Zl(25M6Z)W_MoRk?6ZXdrtGeJVl_02vx{f8g_{_4JqUn4!7S(sl*NtpqXc{X`*MPBTvJ1>8seOO`{-=B6 zj9PV_N=ZBhi~8EBm9n`Fmem$bIZMn%HACQMOzzY^Fjt$H9p<7VlfchhUMcI2vD)+~ zF&1Upo(bsr@U?|0AC;L7LbshNupUA`NzlhwU3wok7tP)-HVx?Jww zQ&>5&y+UfgUO;h+$R5&R z3V=2mee&Li3OhuttH_`mh$)fJ!Nw?mc7(M^eq9z1l=pm8K%3ty2>JFO;te-8Jf%=E z7tJ2J;gO547~3u>nX64~AahZ)UVl_LO;HioyYRj%-c9bhX?)jIgZ$l(3a4)(E)3l_ zJPnPG5?)U+w(1+jxj&t$aM!5FEW3Lly<~i=PZUSIvrnb z{t&qYPFVHdB&2dfiqCl*VmeE z!~}OSizfTTjH1475~TL~jI!FI z$^0}IO%Aw$qHFcD0EE8NdrS4gOWs_sTzOfgc}4F{@)N%*tn8osXyLX47MFX(x|yz^ zyig(zW7|R6h|1j~ofMZ%69##t?~>!HNj6odS_Yg-b|qnNR0tfK#NRdnbsTJ%tV#3C zMXT~w%UUXre5|l~5i*o$978fps6W!z)HEC}J6g0n?~0wyj<;O+ri)8(|Bnv5WBA>jCqMCe>BT!QxTt$YNn4|vQS9LK&2sybg~^)sX)ojHfroG5;icM#tMdM*3P<;! ze6p~^UgVLYjkQ;J!p+-QWGqWG&(Tw_`bA{&|3b&E8LJW_lEL~`o@J%DQ_d9fz510_NVcq_=r;u2R8fLWY-Z_5iPgu zDm0_Hc4lPAb;D+8dLr-paq;Za9R~n*vjz?oq+*Z=6Rc!oMAP-6i9@O|wkhOF^)jkm z7^sPE?fj*0HA| zs`du*bI}m1bg10}LEM&?JyAU7jB*E=c{IXc&}cU?$+za5^X0hdqZ^3a@|WVVMOTf9 zgUU0qx^ziyyFo0L_x_@|NqFQ9Rgr;ebZRJ)_Z<1m1`kj<)qQm!@WDWIvZbRxRt{_FAyI{{w8LT3K>I0e%Rxot!&->C5ql-B z%K;M9Lb`ZIAyny2*F(%atc5E$jtp+(=rdQm8Vm<$JdIS55x8=q-Bf$To&0F=SPRrH=CjvncdIR?niuR@ z&&r+0iUZ`^f4<-V(SSMym1%xP!HJlN8i}R+R6L~EY(aGch+P@r&??E@&lXn+b%9>;52qWh4^rPdb!6{sRwm*^+*O06t=Tk&_KavOb$dqex(fPNh^T=r zKoFiB`*d~)uS^1cy{%+~y6AC5gVLy>(1i3-8{(i&uiXwO8QFKFN?@LIhXS2|9#cHY zP^rUtMpUwfMqq=qfpBcg4T6>koglhRx=J&c@vDnr;UN7i-k;Po$hS{^Z+Ba&p-1eyjp4|D{;z2kV(cy!}ihzj22^v zM#_Ytaiehmr81h%Z^1h05{1OZN4l$B>%zkmRvD~OkNF0Wo`eY&666#?kBct0HG|f! z5Jsvsd-CbWi<4^M&R=o?1Mr3lx=VGJ>D1(qX_FVEHtnJZ4u!il9184`jA+;!6U9|$^q8J_M%2Os%iZM)oO8)UCPvoV1l&YyicAFt*XxxB zw~HDgn|x&0Vj5)kbYZaKcs!kD)g~#S(hFGlpd^YW@OW@kDKVES97V`CVNP?xLrcrI z3D<73QQ_$0k8BFin1$=5S8<8eKwMLH+f0?*>&1!8%&heyx@8EJpa^q%h$?mACJC1( zO;Q4;*jkmU+seN)MW;aKFtaGz)n>VgKB%jt52N0-*pJx@8r2?zJc_3*=U2_XWrc%D zgc*h}U}85Sc4}A28^J(?3Jn^m zW@Os6AZS644~bSzj*bJJQ@%YczF%g36a2R=b;c`>uqJliz?lR6RSWtb7uqwgXFE}= zkxqqV4sBHkwyH2Jg{`iEf@4bnSZ7x|SYK&1)8qw_%F_Xz)rCm1Ss!B`MFUAP4%}1{jLr(mnc(}avmqqNR8aYH|lp&kk_R7%#Cv5a{ zn+#K<1Em$4>Oikh3$EJi17!#%n|03%rw4H}MLkz$_{fMtnJkzd6{OxUm>hCP&<%CF zX*FxHmD{W^m?k+w>2u~l%V++5!8*C^*n%j6C&N0y3Q()08y+78659BZkT0T=$$@^^ zlf`9n#jlG+!3RdD6x?GEX9@VXu%Vdeb?iYlPfj*&AYntw;vRLd^_|py{4&@@C^e;UZ^QYsY+b=E>wF%nOfnAZ)kEAy;VJqREC#%TU zUfoC~|xh=X?BCFaXZ?-B>f6Au?_mvk@V@K*e=^tgtLT*aAc zyDk;4oEpK0g%=2yX`|#pNiO0%#ax1tb^RuBggnC%=UEl_K~Wy`Y<&3Ydu)|ITVqYi zTZMSHXkpLQ6?GdLyd;XYa$Bzlz%~3Uz%(1WCae_jUrd|ub1wcX z_qv+XVI0)Pf{>>ZeNOeEC;1FL8-_jvrqw$LE#&Dt*Q;t*dD?1-qt?3ezb_SE6G*1> zcUH5*m6$^={1hD9WrFS8vOQ8A?WinV8l0{jgj`Yn|Ukb8u*Dhk5qK0$poaWBs!)~ zQ8S;Nv8^zQWzfONPsMW6g~$`4Hy4ZmOMCsx#c#s4ai41QvDl{p6*C0sLufvGu%&W` z;4ARD-oQ^vK~@?{oo}2viiXwu$bq0|orNGPO7Fi7l&{xPhD-;N+3uC$lYcoc@@bj{L9iSf`!sjv?=h=Hps74;N9T2 zCE;&~nZu6D)gN;Un^azPcwwFV$dba+BHvjlB?ARzMKnA$FgMFb&lSf=`)y)v_%+I) z(W^*e!pn!n>3qn$|i-QxJ@7k_G>SuRh znRK{6H;Azy!Hr-77n+7gYLm%-V6FngZ&~2q*7zXgzDI})<>XrN)FiBWHV`sHa zW#h-Z#1RI89l>r=aZ%ZB!Y6R^g7u+4^y!PlwA{8vtS@pC;X(>UE(p*TY5bJ=rQEqn zEU>_>x>dO5@WTLRZC6u=!yy880K6wmdsq;fUb!Q$T_v6Z8e+4cf#N~L&{X&8br)LE z3u6cDMuC$IFH4<^ZHN0a$B*+j)-w5yBgDT6Hewgi?GBbK%BAc~SKYqg*K+4-Q78hV zuE4d8QZ~Lmd>i}{)qLqnakl7oJ>bAxJF!!H08`YJ>%$h2FeSgtdE5b#fx|+%3{MSv z2lp;11?a9bHE?CIn>OzhZ&2=(Lj>S}Hk&qJaXe^Ft2)pRrdHrc-YAHk5|3+e1;O&B zyj(gZPMX4V0{WYwXrkBx{@0t=j1Q&d)fC{Isjc10@`2Cdl2Q$t& zcARTGD&f2}I%VQ%tE(YrR3^T!XsS?$@*3ZR%$7h6?i)4aOQwv4rsz0B;}&7xrTAZOFbQng-I3)AENS zMZnw@FedT}FJt0uOEy$&I|(E`ye(oho4+z4$bbT+Fr_Ph_R5TdDZ0ATzo zQ;RG+NTr_{BNHQzwxx|YC<#r=4P|k);1Z8C0N|l6Ct#;T-1{1G*Bm_NT%oy3R~-PH zo?POISG~w+v&0u;jlH4lxSG8~K6QQZNcqp6xTn~~_VHW{%yJtKA}LH&aj5)L1rzJd z%dCZRcSTg>`K^LW{1qeGg}9vjJ@|9+A1||(^{=c7Zd%yS=%3T@s$1^iRtTv01)&%s zOI$;{0BoD>PWab4mkpf2NOEIL)VXgeWeb5xkJ+yB32Ru%cwC)^SR?IEa@)G8F5bgs zw?kzx#&h59K<1%-|Gp^qaNBYGa0u}NfN6_2h|5F=OAwOz7GWmkpl!)r8^pBWA%F?Q zlDHJ(+iJ=OHi$DPn>Lnz4P|hAB1lO5-HQ26_z6g!D)iD#*Z?Z&u*zF{fM|h-bmUhyiHnLv z*q|rj)wmJ~+R5g=#fHEu!>x&MCG^5vrNbdspI~wS&dp-agiyc^9Fh)5Sr9-_iZ= z;j7;A0_$jBIpMiQcad>XbT_e|&$w;Ho9}1@H|Jp#u3&#}>>Go5W9$QGvafC}y4^dU zooCv+jZN_P`UrCN$}I2|>riZB&3zo^Z0-WN0gSKOu=fKo7ZVHJChUx)5qmwWO~9Ao z3E_`WKsjSfihPsOnZ>Mh^gL9tJ)oHp(s{YKDREG|QE*lf6~(1i<9vcFv5y18!vooA z6HdTc17?Cmi?;f6Wul1Si^7c5iP%-Uc17Z@d_sQYrFg?&?8iyPDaw@>-%=$o52o<% z5z2;w3y(X&rx@#?YuAQz#PjmK*9d0{4`L5c6dEKXCE&1)udt(gmE87C;Uqqk?Khkz z4v}}fR-7^gwHV%8y!jo%>7>eysp9RY2^o&Z?pKL7P7z3Fzehs}Tuhz+AM@n)D`Iq4 z@htJ_sVaFF=v6fv8~}KwYGa=K&???}*XzV5r=V0M^p4F?sktBz%GnR~x4jzI@D$$q zb{)r}tH7M#a-!)o)ys^ z>Ij{3;#AOlks-+2dGED0$<=3wlc@vOs>_k+RLV^TXiUQ|`8!KW@d|N@6c<_x}4Nx^3^SIN{(*q^%3KZxy8#P+u|KuGyth_JpiW99RX|k9rs%+ z&rtZdauvfn2%mVl!`@!@fh4_i#pe|?^%(ngQ6?>-O zw;-J5!cM3Byw12)a^rW!i$d4$13huv6ps5|t;wEO2aDvmW40i9+#6_Q?Dkx6!v*4i zDFU5Dn{bih_G}?lHKv_B{ePwusE)h^uu|M3p+y)|-nl?Lyq0SPkP3pVU`K#VjW7Or zwUe)nMvyI)Q?OaB*krYE9~|@O<_pEcQz#ul{{kA4_zy11aXtC$gYgLBJa?u5%|WDq zle@>|Rb`}Sn$z;`{~bSxueubBpp8r;SQ4i}=myQ3aqaxt_r=M{8M{7s8YEhsD>7hs zNDtcFIQCD;BPp|`*gLd2=V(3WWvfJYk1PqZCh zKUaOi3ur8QHYmH)bb<{=#Sd}fR~c0r8U}$uh}SzxL5|CFl{M0T?(JgZ1kflfFBb;_ z!9;v6b;+Nf3gb*%OWWM388WW%oU!RUPRDP6)E;6^OYJ<|As$RnwFL9Pn?UUK!AYZbjx zbh^!@f|Vg*YizS?s*uff*3r}53h^8mcseyei^RpE6`;0SkkS=^t^ke!_y7);-0oi} zzxr-b6is$VrX_Y4a2Z0n^1&Bai{*XmthGW-jy8d9c55uFdUxO_;OO`>zzz{dth0p; z{M4vI&W8ue}D#>Et`n|ZXHCR4XPq{y|D>5Qm>u2Wy=0~t@5|by^7fW8m&QY`;a)x z%v75MVn%Do*$p>yfbDsq&)@islCZ(t8=)TvAD?U9&yge^&AAbyGs2HDQ1Z5+JZ3EO zP50Os4m+`MAPdG;Zf=;@pWbdAA@6;puuSe;TU;os9~D;4&lF#K<~%_0g=4saeZY;K zaGmJMmwi;6EC1Vd;-wQcdAEdj4XTOr1-=K|9s%tj@G;OLmFvZJ0ip|BSepz?B%L{@ zL%%i%IRqCw-189RRkr@l3SfkDZ|C;9@5jVRlVHq%t8jSWH3!2)$^)a)aHaSX02KT6 z+yQreO#EJuYlGgPf{nUm8(>}-o499}c&Dg>+E9)OU^lolz!H#*Q#VKF;^6ae-|6~Q zTt|GBnWlUz*kq8P#kUdT(ur?@qt)hIzLAH{--}HsyK6byfP2jkL-TX)MjUUOYd7FD zj%|*)RzVH%)o}LRAd4v=6^=37b8kcfbC^{lW^n4pIeL51h}q7|OGa4O-K^ar_l{o9 zo|r1h7`Rah|0YB>MS1(j#ixn9&g2cvwu{uJfvWWoQ1tej#2E-LRLP9-NN@tU=rvk$ z{>@_hTHrDydU26esuR`NSmg>ck{9sIe-=*>gdcHxa@E4wR)*R`uH7TnE@NA`lzbxP zRv?Os1q=5{;2Pevk9C%uzXziF_k2QJS?pCw7$H6i*tLpmYOr_piK|ZTGg(u&FEGNL zG8q?&-XS;?s`B|;g)KjHt60Cu#Q0i@jwo`rM;rg(28e6KZQ@I$ZX0qVqJv6TO}J|q zYlw~`Z4IIS%2-7-OLbMqtG>Xk;oeV(qvdx$B@PuXw_I`sDn#b%xQ-AGQsLf(pBB@b zOq8mn*uEiEjO27uk@-3*6%XjB{M%29#uVO{hC_~)3cI%I?N&5FbmeK*YWe6Ly!(jT z#aV<2FoqjS&87>k(d~r?Rq*>i-!A?Pf)9@bSw(Hq{Ccg16aN0d7scUn=^f(w0`~?5 zjq~t}wJTu6ZvkV;({FQ_AS5W&0lpD`=3X*p&Z;?-iJCq-xTZYy8F9)q{`>}r_Ery$ z5v2z_rb>m~``UEIg4BMlqpq z_gP(E^IXok9)~1#Rp+h3@w1zkw~oD9weUxCyu|_9z3Ixhb$j5=;wbsc&x`f1n)`4^ z2ZyeSa{FsU)vq-1JX8TBkdq9uK6d{YH=O8-psP6NCkQS&KGYd=?_Ff_?L`fT$L5x< z4td-E6(>(aCkMK_Zi8~K5#@?qn%W1}-X+eQM(s@{r**m{CXnG0`(L#W+9b!FU2`qb>8GpZWnUKSrf?rtNFY!ts3c#s;<&4>{JU3KRSS1m6JR{9Q#_9# zvZBH1ksV!C9Ds^Zpa#JI*#9B^cp>O)5>{+jR{)2r1g>yr(NrGJYU7whhO?#u*<5J7 zvItPViV7lpZ+022ba`H@&?o{;^SCpS9@j=XwI{Fpy4A3%%m-)>XMzG%&jl^0BXo+D79kAAeWPAs@^$rkR6# z5$`i7ENB*#gx2fiQ~#5|rS71A%~!=vGqrr|ztPkXZ74?8{Af?t)gZ->ti?CH#Ioi4 z|3R!Ww;u1t5jp)y4KvL*tgxvIV<42=$7^xw5 z1<~DSW(9b&@%zx7;`HHXW$gx3X~M=@gcQP!CZh=(b26At}EV zo28mMlvT=pqEx&-D<62BsL8YM1HQmEUM5=+Bb!tP#g~}f>VLgYR41mYZD0fJDdjT6 zC}jI*KOjq8a29vnBW{|ik)T7a1i7G)^O2G_{-H^gE%U9wP=4f}z-Fj?I&{gJU`MgN zTX7Im)5$)7osAPyy|Rnzx}x@IJmk%IKh``T0oep?JV;)8lsF}L=T+ZebOXR|jZ{5? zS=01QO36+kbX3)6Tdo06 zg0);h{WFGGWIXu8Da8~83XQaPIFn#x9J7*vI=o2kzJ0;_<<191VakS)g}^d;7LXkP z?i=$Y&;aLJW5S^BZKPX6K11=k0s&pi*5?f;D*7he({^-upKI_jq@kkT|NEf0JV@frk@ z!_7|j4!Qm(;v)H;YlJ(^0SIjhsp7~^s04&@Pfa``J~AC-h>)7Vi48d)m$@;o8SgV1 z9dP-Z1FRQMH+zbS3>j?Ch0352Zz0-_#HZeTUqeWlb1ugb0No4nR*^c3MthaFj>K6s zmnv2UqE0cXpROx%YL9RhLVrZEe+{uO(r4g-*g8*&M+#l78dJ`ON5;4AojGf8>WQyy zE`1NW9!G-a){GV5@FhO-k!Hx-9uPao*lsstwIStr4Fsnx~1p0%*(j^p3RKRcmUc-2HxW@UG`+ z{i#0@hd5!IJ6uE{gNGR#_7xJ}S*ymD_I$e-KL<-w#A6wGPTenR|uYQW9I` zmwzQbJ`LiCkPARl0CEtlCCguzW$pY&@!vy-`ETNFkc@P|c|?<1DrwD&&s`m_U?0-c z!zSeZkBi5q9QXmC6#;w%FtL(sgSwXnT=Gx9sd(@-U{09xc>uC;2-V`dj_zFv)Mvi0 zsWV(B#+>yy%SHEsyj9fVrM4H%i0tUOHNy{t%97BS6=SQtxt+yOhedJgM_LL=_0&Gm1JpZ z9v{Eu=pGn*?&}`d@*GT^=dQPwL3%{eCT<%=J_adGy?@rz;_VZni+2`CIGjA>&ccY( z|IIUE$$kQYi5`((B7*?AQ7%`$=q>WJKZ=s5LT>?)D#^Q5B`5;D5;sya0 z+lIXnW*{7*;9J7qgGgZiPogT{uy3&}V5?_SfGDk1Z?&D)R$2U!wWNQ`U&!bUlYgK8 zlQ>O4gaK2h(&Ymf2ivMV_gV3*)#F5f;R${X7;4Db3?IfjxL%2U{X+inKg2Dda*zar zV2c|CL^V*91gujq4jpu4G8Bs^6dw!n>ljQ=mWaM+J$=a`*H2?f3n*xO7+7TA7tDiYAL! z18)ockfLT%48Zci+et?zAP%uRTNbcna&fl?qG1mBV#1&v)H~3pmRn_^LH52}TJcM2yBD%b2@>s(y&{#oqchOgHJRVPD4bjy_Q-cgx2=3q4nlg7J4hm_i z$=Q>5@6pu|g4B#%iMJkI6#<0KT!Vfz_5({;>;G;)>mu^E^hgoSJEe+CXCZEN<<*U0 zD&xkWD<5AN4p=z)t32x3V)M|@Mj8FJMohZ1Nb`63;lrUJ`_2~%FOWYt(7J6@)FtQF zjO=L58*)|fRE@`TerGu^I{bLWdel@Wez&BujrE^6dIgt7WNr&?8f3qh0l|!uS zCw!w=N_=%^TTsOP5D&rN2az03=CG+oVUd{OM(r%aRYW=h#yXNCPg6(UX2j^6!7AoQ zU6EGN+B!|b2duMDfsiCa;$vbZ4?Yn;@Q$K&KBGI@CAq`0Y+<`>%w$>E?8bP4+wvC6 zDit9V@X93avztPf*^&=i){AAkRj8g>gJBF7vtAwYb<*?WsJU@q65C4Gk{~_^tpLy_ za;F`72chdd3#~W%0Z|=lvJLntNtT4(?}{rgFGWrk4i1t%h+klr!=+7LZY0*wgZ&s* zFgWLWFbPAn+h~)|OUg^LOSVY^a*%LAWmXUilt8=>TY^sFC8`0h4iuA6W+=9LtQUL) z;b%5BVN4%(TybUd@+;@<*m1u6!y;>u+;e@QytYa_0#Y|5OaQ$?xf=FB^Zvjd2#$1! zXC9S5-%~iogAzZw6hbsd!YEV_Knr_(_A&LSsm33+TEFzW<)-nGS|luN8-zDbJ3jZehU7li|C6myBehnmLB z3*(UHDxyn;wh9%8G}jOxL_^)!R}I*k?rC@OsMuU$W5nOlZ!Rah90%7T3>irwAwUJ_K$ppwQ!%TC)X_ZqU);W zQ5lRwv{PpO9<8yg-=5rskO4=Wu zZWRxeuesLx+@YGs)TN^aPyZ*y%KqjLS^Mq37%eAe8*>e2YebPM=zz|X){f%pCr{N3Z$2@~Iv>z=TV+W*cK$IZJ_Zhyi$X8*HKJ#OCF@^95Yui>9p z%iGjH?+gC*?YM9KSjA%otGc~vFF(Qy|AO#WMp&edG`ZV1LYH59 zgg(QIU#K#ZhB$?tDoX9ke;N3xDye}|o9RleeRAzE=_Irw651pqG#?@IgG=L+ZzI0u z_DvBbh&xmfpB_~KpV)tCd}24zC$1*O`n^?wG4aa3419qH4vtW=;FpS&$SxHqv7Ws& zLTf!Cw7M^=+c`cC#V+ryFjlX=^jQ5kjn!?Cix%px#9Mu9sUP{5QH4CJL6n7a6{`3M@>l^6DEyDShrjn zlQn@CRs?t zQS)C01$od0qJj*^sTeAXE=|S7e?j;=BV4BPlF_z(7lTX^vf~+P>ht7GABFPAOCywD zBf{qP11d9hh!d#h-F>W4U;N9sPgG9B=Js7t&HXt{3z-#ZR7T%eLBitwOXCx7A--mg zn9PLqtw6{n><7zhHxIn}r8-WGYP|R_Q$5QgE{kaAf*uuVmpK(^w~8-~&{{;QKBE$5qaCLjHcQ3-cWKsM)w*h|`o39)dibiYZ4cDxVwj2VpNv!6B-T8#i*2Tt zpZGfoVQK-o{qg{cT3l4+SEU8{_XU+WGB=%m>#wI=H?c+ceQWIy{6YK93fvmmubW2wA z_YwQmtWn)k17_C3>-=r{3w3bRFs8x!kE%bqe{-h(Km>2qo%NBEoS1PRszsx-dQe~M zgGk@Rom~UXFt*CFIWVHd7Conzk3SSM{#|uw+pu(M*LUKo#_%OVDsN17hk#{xe$GEu zZYXSOq=G!J*<=+a?_~+`Tys^)nB-uQ5wcjK4vp#5MH?yUWf2-{?@TGgbt0+K7+HYy zh5U1fRjU4rExYV6YhL(2f1BPE!BuZ(4L>gHZp2lhD2rBvm!vl~t%b(&vTXD=$k z7dXQtj7&3a-hb9D%dSmkgmTTY?Zee=*FF}^bIkH|UUuDL-VUOkD!OiUu!w@-I90ZE zt(u>cs&cx;t9N!J1k20{%4w=>N1FS4>av$}(+O-{J>3#LB6JZLZmB3#lxdlNi0H0LKI>e2-|`sn0F^&3!=1E)s(-9oDsO{H{(ja7HTBpq z?k8F*eXKwKwmPY5$6cbW{;JLKEVs{PszBxPZ{1rJ9UsTPWius0*{L5~yoeigx_=H` zOBIjL3bIu@uS!Clf+eI{jw=2uMRYxVB zaOt)#s*+ueTg82&ysA<_nw)@Wqq~5I)+beAAyg(+*=JU^-w!IWteeYbxymbR+nqN4 zvzOKneY8ntQ@cs+KMwasmvRX2k{t%oF%9=Un~x08ZPxss?C?HgOW_^OqFwe zmb$(4L6z1mL)CaMtS-k@=6hjv`AmuT!us+*)R#W~dGvmjcXw{E32FKPrJIKp<~3Dv zci1S-^N$f*mfe$^+JP4J;h3hKO120q%?35~p5C|I%80Jkk#9Fdj*9dR`g{ag^6xg!Yl4p zMcEgEIYwdR0yTE-;vli9H>tC8!wPep?90=AlU3VpmC3&F*a2i;`1j?;zR*wI)@NS` zCbNxwQKZ&K$i6VRIoX#a!&PBHgnMeUYNLJ0O)VsQesxS+12QtyPb83$`M~t+cbmVT zZb3$d@!4c#=(ny$MuvaaCnLjs>XDJ5-!g@a4E+}WkdfJElxAO=e-8N#85vq>>j)Vc zQX2Uw85vqlvBqa)c&;)sGEHbdL@fo+eU^+2{nj6`(!8rGD2;W}XJmNjxv0|U6Qndd zXnDJkk>RNilF|f7U*Xb9BTGC=6SXot{*)?RdD31+_NCbD3h^n~mjYv7#4uGnb$qfp zYDfJiDY@RP#K~T&){r#y&!hx*PwZ5QlhfSaJ5v#iugTOGwM#!A1KfroBjsn=*phj2ClN`EMPP zzrv{COMfr%Bow6CZPlkYHF3MnPzBTby1(Z^Vm;esL@b4zdJ*E5sGP4{LiJ*mQ!tuG zSa+&|VGWa$FqC>DG7*z-gG%h5734L;xOYmYU=fiv9AvtkoK8z_q4^*Gntz}k1tsZr zN9yNZIyRtFSmPN zC3`mt(mIMCRo<=1O^8UVl}A}N`RA15ROUBd1T&4$tYxa;w#C6BqcZZoWm8uNNn_;y zP-FV53+FOw$GxLmwShbe`x~pWg(>Q?U)!nMuS!)t7gcvD%qF#=<xv3^sf z)3VbuOv>ic{q8D|^#>~u_pHncL=PekimKS@s?Q%) zd6;yfTBN^KWgQx%h}SEsk@c}E>glSH+^h5>t{PbfJ!&MDR#YQ-*r*XYJYwY9ih5*y z2KlX#qI;IKa>a1~@)PWawMzW57pJ2-B}+Xz^^_|3%hf6UD(Mu3EaEFw^r)*-dP9?@ z80MsyFsEURPKl3Dr#h(%k8TZ0L!$_I^lF#Ut9-IVeIk+0;p-cyn(w*mC!VE9hZpy0 zigf6=Uh0c<2qqt+NM{F`=^rW5VfZ47bOOe<2J$0pml!>=W|&Ba!-212n&wfYL*2ww zjC9;n-o9wC#H1{yaEH;|NZ}6s*0)o*!@uWJxWj#BQ@BIF<=qtS&~Gu0!krxy9!F1^ z+;0$tJG{?wDcq5?4Z2XcW07I+gsUG7cX+N|6z(LE$KB!QPY$MVhx+OE93G!kUQZxs zTlYb<(Qt>!$s^CjLwk_tDx`1+(|Z{1@YGGobIl;n)v|);B35KIk1>jdJ3L-sxbsiE zu>^8BMLXq{%x1lVq8(P6XVDlnR|%_cRi`JJ6IC#Gh@VHD7&%QkI|ZuD*qHVjYX9oo zbed57iT0?Azuo#nB|ec6l!gj1T6KIP%Vq8tmH&k6#jH$Rpr{ukT=H{O{6t2&pk0}b zrs|9zul!CO4dW6=Ri!7h(u+)A>j2t@FZ_M=Z|d?Vvx136#uz3PJlQCnf8)u1{AV$J z538+Drg2|6M;&@H!=?9ARgQ38*l$(h8kZ08wd%PhjqzFUAs_Gh@mZ%-!J2E`afehX z_SF|J;#xfJ%PR2t?SlLc=&>5CO$w59#Rk=NZKrvpsCsim5Q#hMM342v)G$OAb$^WP zg+NP;NlY4|-j)=TPN1Yvsbv=79_$}I2U36ie;)ibOsb|y<4snR%$F^7c5OB@AfHj0 z>l(MBv|KdYAtl!@;aa}v=N&UUQ`focgjFB(vI#}B=UQOjEvV>i)wk;s7`0xd&aX@B zlSqCm1=n%or4?R05LNgS#s2y9PH0idzEW*i-zR|tEYfkJl`5}ouV5*e&Uz}R7?TR* zlK)b=cy%z3PKgacHnYc51t!W@4sG7q6vmCXy`>`-q8o1Dhy@h56_fER@OfZ@>1olx zO`z{Efg3m6LV;Vp8K^N4;|biT9k+)G+*sv{a0#M;8@Jy`-j{ykhBn@}%t%w@B9~F` z%k8&E!#4)>$M9`{BS)~~W!MCEy!4=NpvaAWTVv7ZUWc^_l{uwh@<*sF(V&e-<|tiY zoT3TW3P`4n*w2=dKK_XmMZ-15*_{1sxglBh!VXb|Wt<(O@fra{LyXr{%R3X*pS|ky z5?ZaIepSDMvD#&hNFtY7ZsaTbQkX^xDb7a~Wqs785@y|w!Zgk^C6PNNx~(UcO=h=S%W->57V;&Di<1^X^F&d)3iqR1L8fl1r%cCLsQ;&vN zN23}dJ|qp1dr(6#AiIQ$=q;!stsJpDsw4V|m96c1DHb08W3@vRM}v9MrJ{1^Z86Fr zSD9d*IJI_B;6=a1Mp6(~$$_LGatX&=v}mVEL1<^ong6aJ))rO}@;-P@#yGx=eCJ~r zZ^a8^Gc1^QDv$`%HGZ-^iGrcSbPPAb;FBro8};WZJ#lGt^Y5+sGak zK|8gPeS46ZZv|zI>|}0{J>YyJJA)te^^n=v#zZCsfsgsIi;hsxINZ}}56c_djnebT z?>>)KqBPPwpNw1;@?m)0w!#BPpvP9BPV^ zXkr@o9fR{t?Jt7LM3jMra4O4Q5hUr0Vzd!Aq)=r$Y92C;$G}5WNwZFHJl?LXvKH~_ zpBS_%Lt+q5&HNA#IYB!+omnr(5=Qj=PcZo-%nIUi6d1kL$5$qz8{vj;;b73tO6SbL z2%nW;)E`0R%63LNxq54k&rEQKlOV7IqZ6f2(!$P4AOkAupcKDUVo@6W*}@*gJ@o$| zzn0zCeR!YE10m91vUy;vW#;7O5-E<;sf`-s0hRwqgA`rp%ABiHj9@z*{#meV;8<{~Bk@AWOYLd2`3ngvB8_C)ZvYP!x0-e)jGLBlI%4RG` zAO@`M_`F0F+_fT@Lk6Ut%75y{+Ht2;I0=ww)JNilkcD;B(40e+R1#JEPw^wq}BK%Ca*J zYi;xQ5}irI7$ugOF~?LuE7w|yXM4E=tCDZZp%s5qC3a43!ZzfWXg*;5Q!#j(tFqo# zs+FCW1}T;jx2rZ?76&!4(?RX-vYPcv7MZghB($?{RWnyN$i2#s#`-G~?^`*#ul}vt#9eVjYh%X>9$IcCIG>)R*G#Hd)H)5_Z>Mh7Y7jlwXuJ;eq2SDSn z)DC1|N5wS02bFWthVY`j1|4$|%?D(sm->5J$KXM14AQB2-&xq7i#wZ#y#(iSkuH9C z9on=po?)Klbf_=?2RfJFMu0ja|lumX4lGHjXIL6UoNWZ)rlNsEy-oG>mLqv9Ul_GqQ0EA7pG? zIT@z5J{!kqJCKdbr%-wB?g&or9+B zGDrSMR;`E@?j%_?c5O#5Y1J5IwTM+KpmF2LstLmhR_2XWOElUfOhI?8TJc;4)#iBY z=Tw{H-^WaCj($p0%k2?ST!M)MrZz`)*?t$OHpk%Cu{PJccHzDL-gt&FWjTrk3oFO8 z?WD3CPr8xHa=*~-neOi=HI?P4AD%2t?Vo%3~x*M?+?hIb&o6*wduMh{~e$;yfdb$DdoSZ z8&-Ht{(GZ2)9w4j-%qxq{5PWuQvREM%OuKw^Y12<|K>hu8L-?>zeRn@f75R(K>6>9 zq#h&ua|pciiRFG)kB=z-okP(G2I{8VZ=whB3<@)v|K_>Ar2IEIhJL+caQ;a7Z|WzH za{l{ERZ&MyA=+sEo5}voqa$BLb);Vx%763JZ<3B|q@|rpI`Wc7N21wo?tPky`y3M8 zM(OTi!;~CB>28ZcZd0vwYj20cgaRqD+>D;6fAAVQ$uClE7G=2W`!eNqnCO?N_C~)g zf610fKn2H=Z4sT=uHw87H>`}*-b%?ab@n+XM*aZhcF37ZJaBk&JKVmMayxlOXqcEb z**^+UrOBp5qi^afpNQ7pc)*=hd*k2tvk&5)kFgJ;2mMH-_NIP)BvExM7|J2DxPx3# zzHvozG#;~}=|Dy~jzVo(NNW%k-!h5LE7>3Akg32>+mrU8ffm(pQTW7T*Yr7S9xP87UWZi2}R}WQuP*RFGRD4Uy}q_(l|qmQlClDZVk@v612% z(P$l_WKgDI$hyfC-$=3a0Zs>)_b#I8fHKodG&1P`wYG0%^~D>>>OXyxnlm-ok@&mX z&Yl?GTpih5+}>K9>zkcUzb!2Edh!EISsm5$GE`EEe>SN6%UtetO||5*taMF!b_=d( zw6MZ>|5k@Ca}RkI-tjvTEv#^RWlj#zgZx#s=!dBW%GqMVaeY+LsNKSg>-|Q!%YIhr zetq5FZhe;TcGJ=YX&4@y8=B-0pUD`<$CN1Gt-4qB z?B6L!^5ybw$`G^C@){&Cnjv5Y4o9jW^|#cCR6#hzz+&(E7=6QHFI^h=xqoYyumh^; zfR_9lE4-$j!HBuSn?p7H7DYZ+ zM=)zCUurWht#AXmI)*PMS9j9D1JPQapzTbh-T-;QHzV@lCNA~TZ_TA%av6mted&>- zc$i!rkKs};{T9>6)$#B9$<=WmF7?uH>mG7-^jmYOccgK3g%3vN;C}e#3A#GkebSVA zd)Qsc$raHN*__0pPL5~cBJVH8)AVZ`gKY>oIqD}mu#-EjyxY8#l+Rz}WkN=fljEU1 z$;ow~Kvzsga&~Mlj68*Lglb0hKWaXpfjM^Z^@+#RN(ks2uldMc6Bk-KZ*9p8h z=}A`dR4?+`i~NY#h#jJ~hw<;>WF-@`nUj_DAm1SG#%Nxm^H!#r)A}!GEP2El*>d2>oHr=eb zkt6%ulWFRSoCIEdxrom0JkLXPcF&=8xx;sMCzw@0XZIZAqr}a0c4zo)=ImZZF6~jD z@=&uJLuYs5&_dhl36Z#cBAwmox6X^4-L2P=v8dv3^E5iU({F2FG(Q=`th|cO?up6SrT0&5OsmOHJSNV(Sg-!Gu4dJ<3n7O0}>qCm0=(pJ8QLlrj=TV!*NVbs8V)a^XY!<#XNc!~z>DLvR zw5Ra`j>lZ_EX9|MoX8Z*20rV>Gi@{0t9xx-H!1A#nZi}DKM6CL^q@l&LGc7!swHZy zZ`hFWh$SY3O30`6L!M4NtMYzM!8c_=*TG5)_b~<9;m|tSUY5Wl0d|bWOvILc0AbOX zsnl3Cyy0nH2pDnUK6THpHPxpV>NXa$BWhLEWWwd72nU(8A?{Um{>gH0O-@2<7R?%P z`$RSBpWNU{%4O_TOa5uZu_<0hd-=%hOnNt=WI|Ox2AvN3Z5&3MRm81y@He~s1nBA5jgkn3t`*Us zI$P>OksU6%e&)v}8o(w8tJFMiW%$EEb)g5V1+)l6NKK*$DnQrdo}w3y*7*_1zsXt& zqc~zWzW-(?C$T*_UL1@bB^kHgG0>586D?*bgS z5PcVbX~b)&_^uKEK4bEYOzj80d?Ug1dy#zOzMm=I$l$l>U4TLgrK3j{Y7?(e(vebQ zg@^qdivLp5k^13{D)YioA>9%<=I@80jCtXR@jXpRNBV7Tr=%nQ-b+bG?t^zf@P#A# zt^Y&s0?=={ffA0S1pS)%=g^N*!m-2{5HXA11t8C@@29L|KH2+w&{jq-n(1UiTwcCuX5X`$-i~ZWQD(-BqRTStCm*{91r(84c2@-D(!uxQSZ^ z1V$51Jjl5?HSI4<>Ur*D^0*FaPWKF+Lu9Jr?s&a{b{O8@^xVm$zM{7}(|wprPm1c< zqrbZzjXmp857(nrLWWLC5B-R-X_aO17>b~JE15iKk;!hbMuJD!klM5Z_3gv(U%7pdw*pJ}Y- zRznQlu2tKF2$mRCx28bxr1<)(7@2kG##5!8SD_q@^TOvU z7I6F9s_Pzn!4+dp)WJQj%=I>PZqMNKB1&(WFywU1I8fKT z)+n8WhmTRWP2lgDS8r6yU(4kM(o5B$*QO`mgevlpznAr#%6omW8!6qd%3dGGTq<$hp9o*lGe_Ls)+JT!=7OYZ8Zc=<-n_~YWV_6e1QT(~ zKI`o4n?`<_As5LnkED>T0rJABD{9l2wZURw2Xb8R#7O|K7GOf9O zp8PWDl6Z;ya;foHavthk)GzZ~A*u#$B)X$1HJ*DvIcEATU*KwBDatOI>t@;g2hm0y zGY>sPj+uvs$T3qy-0xm;%mml#$ua+8rrwuS!7;P?EV`s)=JEfBj`^g`l|f?AdW2kZ zG1;jsQ}uyvsW!fH^;MW^Ad01gDXI2A_`RWB6JATTlkFwSyrReCKCE&kH*Plmm&gK_ zlgpgxbHfC)?xNCA@!#fxYAfA&Yx8F=< zANq}7?}@x}B@=MBN0S=dey6$8JHidchhRFs8T^oDr@MeLP}I_HXx{`SE$!C!B+OaV zt9{~73~v)Cb-`0(9u+Sjl>cL@K6t^(Q}yBLI^o%}VO`V#e4C$EQ)D)2vD|7>uc?iU zz`L#N9J`r0W~L|qjnqctTpBLgZ~~*4{LNwP5Y2}%{%$6L(VwZ8O_!Z%07L5Ig%xVF zE~k_jV`@j)3v%MJF<$yjgT3|brtZMH=1|Zi)0jwoGjj2aN54F@OB-@B@Oa7CJDIW% z%+Ii2vU^d*C&z3XJ=;`#SgF=woHs;W_S{IwZB7AQe0v$KxiSOs5rH`eE3dHi>;XcF!SlR)zGcoQu~oLEA-5ZP@v9r8%zIV&R#yh%uKS9#>`I5$PvSfjW{cYBk z!b^QgLr~1U1^3dPK-ym0_fZKpL(5dj3;1OXqH}db2Hr1gusFw}(!JuJQ?J7>YqaV_ z%Mz_|Fw4(JPNvRItrx+aY);k!oW^~dq&{6oaGK5NTpu2Gd`Mnaik z$qFD#co6{)H{3Q-T_dy73yknJ)~XwR>&GX1t5q^1y_^mvb8zfeG3{5VQW<{lx~n=T z@t!SNC^WbyPWb!kF{antdhT;~b!3gd}gkkiplQ#%XuV0A~Nw#u1g)#^d~Xa>#J3~g>R zdZ7@nv&aGUsv4*{Vx8EcMDMohKjEH&GBI2QHKi2q+gzvI&%YRD5~oz+f@BwaDwW#j zcCM#pFIbjfnMD_Pa%}iGRYJ2L8Wqf>o&TL$^w4qmvx{8=27c(If&M?cZAzTU$XY7S z#&GhEfUByXf?SN(_i5Sm7LYgDtsywuc_PSl<||5#{Dnpza)JZLo|^jm=^A z9OrPb*gVJ#D4Oex;G2!sy>Mo(GvB@DSP&|>-|1xYlO79O=Y^ZZC}?q;(+EaO=ViC^ z07#tg9B}(~gJbiZac)b8ka)m}vlGaYSnH7GHy}@#Bp6ZF6=b3Fa7vtsIinorlQHQE znGZUclAy&5Lh)V5Va34QT`MJyU&shA3JsBsLiq)@Z94^V@Zuz=E4;qJPJ{AS zoXHJ&RUR*FHs7AOYCw8K1qp5y!CfI|F?X^SQm5quYWX|K1yFyN)7R}ZpF537h;*Vd zh@1y=b~)o3(u25{I;|WK@ORSpg#Os&jI<%Ozx`a0$6XBv``eR)WoDOHI&yQswT$o%#O6yI0SU>e4COhy8TX|{kR6OijtvqP+bq5TtV6O>J}o2A6PR}qU< zD;A6Oxxvx_PW+$K18c`gs52^Vejq9Sr%FH*i$6fTVgC-ni*_?!K2H6$91}*C2K1iem%Y%~o&b`4LQqU0?VmbH;1|st3P=1E9-R4a#|AM*=ojvXj z{{fCQbaE4DyX$Xpu|9#~M=Ldgv?KPYhO{X}Lu2?R*6Wmp%<&JCo7dY z)g2wxQtBj=A@M_dFn5ylg7d^WqoZ0%ovfNL>qGlm7gH6+)IX}Fj42o@|Im)JgS%DxY+nd#KB zgNcS9-5*}Q+qpJ@9xU?)(Kn!X*=-#;1M(-?{otO9b~5zriDq@dZ&6LyUI~a=@g2yX zXfq~vb0XZ}Jn{i5NS>iXH!MqwHLUv{R+k7oL(@x z2v0A};SV5-?5BbjZJ8^f#pCv#e*7>J{RCE0?07aJ{ktW_7h6DW0%bZLFPVnh4!n~T zk1s4zn;eev{unYB+e1>~zV_)NZBkjzlHlp_1-qrrjquhzPPI$+)}KTq(8zv1GFuTZSJ|1c_Vlp_q2b2asnTEVHgw4is%cOTlN) zhM>2gL7^7e6b3zqT3=+kiP^CEIp+=+!7GsYyo0GdQt{j18hRj`nE*x4JK2m)T!j74 zJKwk#X?W=6tmWs%*)hLIw?Q$!8kc&KK*;Z14RhMTW*x^r*6 z5;k9lu|g(soDJ2kcknZjhA+9uC|nv$xZbJjV*VTC^|(3|Na}Y&W!F2ow#({Xs5=f< zk%X*wg;3Fc3OB8W%msF4XxDgWgbUL1A#s9}oKQ{~Nj$ydtCr=D+bNADzS`XoPx3LU zMg8>esCK&{5&Jp%6vzoqA84{8*a@_>)8XRd&NIOR!-Reswk~tp#*^4@g|cN1zLQT4 z4?}@+I#Yx016!5TmxX58a4zy7&qL4Us8ECpBaV{gE-os0oX`0~!p%Z2uXO6!@l;K?AFU=@@4zbOg)f+?~M_k%ce!_3AI`1)N+~-S}PS*6OSUc&09b2)1-Le zPAQThe=!PDhq6Gxg&!TwCT=(IRPid{JtJr-o>PGCy^J#N8V;lGNBxe~fAJ*vQ zWM={|jI{{POm^@iS=4tGEV>B~U^(W&S_)%t#se4=_$|DAvvCGQ`j>zQu&dy)DNYZD z=%Y|N#aZAsmxjjP;vBH~N$fC3vh8laXQAvi=R>#O6R>-#gQXF|xdN))?(|B~v;x(T z+gBlPV#R2jHDglD*Q1e4;~MBZ=ju{ecg^vhN&yi7@z;r z?#Ann9~$U+5~EZWc1xIY(%!={yxt9MPT6mAi~cEe{*;ZLp@eqEWEl08{jrG=uXEeK zf}A5gyhTRczwmW!`@gIPROS#v(tnx7&S8M`=mhK#b&oV zKg~2!7z#PpRf>aaFSD_(N&B@P6kle4$os~+0p|4Mn7$pxQVsb<_50l8#mE;BrvgR0@ju6IQke5uh=)H&&jH5@#{&t z>%<0CuZ*;_4hs0AEgqo=p{@qA+Bx`5B15P=4r|(>VWDoi1MF@W?uNl$&zx{K@gC&o zguBV+Aal^F7ZHL^a4^St)HNPIz}Q@;QFB6Vz0O2E`a7njYfP+LwW*&dbTgZBaWm06 zS^*f_-Wle8cjV?!NqeWS-LIImWfHooA1ZhQZo??`#Mug7gxahLxbeONUFh_8RouU) zXu&OqvmY$X_gKgA@P#h$ZF6ggRR2#{^0s}FeL$XJ+A3o^6xPaY)?#@K@*6u(C6$rh z%^`)P-_{%`TaR^&?oFI0-Os8{ht0*fiP)gO&*;8u=3EJ<_c&|#WPtC|EP4%tloHa6 zCUE{WrUuVd6pvau4N{B>uhYs(X1s&*#Cvps|l zv~#CBegh2Mi$O1M&8y+Ty%^`xocedzWgZ9_9@)%sui&k1M3su_h z>~ZC#7oy2G8z&Ir)C5PpER%;&mL{X*wz*L+wTTB&mhV7mJtqV1?Pa%cPo;l_Hutit zpnoJ$`~tgro9$*c^MMrK?$p$wy1P5MJKm`@8HsQNi3iR-_N-t&ZP8wEY7b^;EOHiS zLA-|NsbX5{TcGGQ^y2wOjG{3ddkxQOMI_TK*!sHN2JU(t4{QXH4Gm@4rF1DIfd&=QY#(U56nAzdcIgqp4X$$KP+D+h-j?OdCk}pyFyFNZ{){iP@)1N6DXdc)JvM&zGxp_tn?SUNQ_o;bS44W( z99le!dLWIOSQp^nvo^qvXW}|R{hg>}lB`B^n6=ZsHYmt$?t!B_?MCisXXPt+>L*P4 zAL#fBN}7q85|XdjX%6ERd!cxjot!|Eh!=3X{0MnNowknoPQa`7Sd)Tn1T9PLOc&Kb z$ScJhFylP{vebUu#k2IJ?{r(ff`dQeXKo0Cd=n;>8+5cXgJFMp7=e5jdj5pnN~t9X zM}G=mp~To>%FjqR&+{s*`Wf>u{O}S~{sogf^dL5c%74MwIf0uV#|3#5^3K^Q(Ee9@ z;3Y-O8+@y4B>3rGBi=k$nf&Q)>R>5WCVIe6!jdwP5cL?&PThA8W~V$EFRb>5bDtQ9 z712V@HNmtj2IC@_;$i#7*IDG7UyW9?-O`+Jy8F0*#*vh_uLR(DZ3^ zYTQy8@}I^7CL6yLKzedQ=bmwP_p_= zdow!&T^V-Iw5QRj+3E~AccW|0GmC`ZwJNw9wU^N0=VeOoMunvo>o82c$Ij@&EqH?M zJ03GQ^;O(Y^VEXTHCgJ?oVn&OEV)fme2(L4LwC^kVCf-~wq6Rfm}Pc6?Sle1U(@LZ z+h*CL+=*&K<$J><$cCXQ_u8+zfwZ^|TFkabyO+BzB*pC&%B91d|2&i>JNWS;!wYWM zHYq4bdJsRt)H!Grx#b(!KL;sbUQR>eT=T6a;=c^8nTyUYk7yehDw=E0wcSDcq0T%^ zJMy62P&^L}9rY8Lkdx-Lhqltbq9#LH2D1B_8y(+5$LH_pf8SH}}K9!!eNq6rN1@nAx~clvsm%z(XmW2A56t@DeJQzJq zjwhXDmOn>boy+hQm;ymv<@t_bv~ZuowkS+~2Gu^Z(>Q>%{s(P7v%hgg@)p!ThQ~f( z*4270boQ8?<;qb%2X#M3g<(oIz^2c!UooxGM{w5(duBS*@hI-4KFUw`5~x&$I!PVm zLKs?xDGC4Xb zO)zxIr!6xR1~qk-Qs@LStzv9Ky{wzrbn~p8-Gj2R!`+%YgV^7Tqp+wsCh5vAm{Zs1 zaHcs%>3L@R>pZC20&B>5v|{^VQ40sdO=@Wk=UQMlO}6_4G;Qf@ak-8Q9ck%g2b$y< z-gFP-?J%E$y!ArUW_5?A+0JO!V0Q$W?TkpEQI^0_dgTzzOL&i>Vb<~6Ol{JgN8HSp zq1u|p29zA#gNG`Xc6c!k!NEiJXP`Dz=>(OgIo((lbZ@wPT9{?I7w($oJjG@Jw`%?A z&Toz=3e_pVQv_2d@HW@_GoWwAL>VvB1915iG|MDSIT{|Ef+oQt_Av=J1x*64#Wr~P z7CU^$aa*YFt@hQ9@fjUqxZ||L`=Y4j82h@l8(#F*kU7Hn3hoOySP&&K`~i8@ozv_> zH9*fAC?FD@H~?E~pl8c8-Q-(PUIT^7V~#>zP3LJg0kVcM;|sWwAg+Q%iB3ir>L&hM z!Br4k>k6)d`@asy60t0oX(kj~pi(VNcX7)rFtwKRs{8O9w5g2~QVV)>w8kRzM{VbJ zH+D4cD%rU#!5YATh0t4%LE#z+T`CjQ(&4lVV04nJ6T-ZtS!PxPDZWBmqomZ#ZehKm#7Pcv%38w`KLFMnZf zZTCBPsbqoYl!SQ%o@qbd5D7HK1J#+|kX|PK8EEmlNym|NibA7)x3MNk#LF|V1e}}|Z>~vV{2obN;ME0xMTmM?x0s61 z1F&+PeS>>%%)iO07oH69GQyXXI>)clVz%PW*vOOn_3`wp!GT@tkL@9xF_7b7&d2tB zZtdJJ86MuyV;qQ6jhU>-X*MQ9Mngorv4kh>4xIW-R;=#OrgwOZ>0nXg(`4(gbV~iTPZKmRfZKhCc#>v`HHo!^l#}g#t z1R31%Koxfa7l~C9CrIbEICEnOk(9YeM0K2?9^_n)c^yU+3@sUmsrUq*qf(%G-)ex6 zX3o+-AwLeo9rhaaLe=7({_f=Vb&E;w+a>tcu*fGtrEs=`4d<$&z=%@(+d~}_F!jx2 zu!fl6JP?~#Bn^_?c?UhV#;(uB{h;x#)2K*~d3(zIcNy*67o=!GRE1rm9X!C2(LMrO z$6(Q-l-7UX%B!6(+{)A)aOUa=UAtlVHO@~=irxxKu65?}y(zf~T^D95cLckd`wgz& z(u1JId~+?4wEcZ3nva%`b`S=lyXT`#WXa5g^Yig!PCEqaxE&wBEOj33x|UG<0H)G- zhuj;=DYWkhFp*-bxuAd^jP~FwP=BGF)rZO7fuYvx=(XZQl(l#7AW)m$jwgjZtT8i_ zO&?M_Zd(U(AzsbcSLj@J$&6b$*=)R`U@n;wN%(zi%r3WtEyL}@&Vmrk%EOExZ5i1L z%Jb}p;%RZW!JHB35p&Ekh%B?|Ghpus%)XWplf_W&D!fL?dRY!ft_m-VJPUP3Mjp<< zsOZBfSRQ>SgCisHrE^})V~{us7n6186Bslqj6i${i=q$j!NF1Xl|-NH3iU^0#zWA? zzX@iIHtSCte_`mO?vTn=$dQntN=ghgP{knx8Jkfw%ssxoZYAib+pWzPi4Hy z9-}~QVi(@(va{WeJF(+u-0?%#3Y6m?cqf_efbwy6^7TA5%5D9}+|jessZGC#GX0R- zPPEuod!eu#=nf1mq+eRxY)HK5IU`>7-{*#h;~)PPApUNa@Py{YtIy`&!b`(jd+D)z~h z3I8BnzeB+^yAGTw!TJjC8LTsJx4(we*+u`>*|>w zI1@sDzT;H3UH`cVijFv!O^6$;7R2LCvC77{mU{ji@Zh8<{GbOuBq`1aC5Zj?2tPd2 zg^N57JoJ32GsAIYwGfgp&35owMTLp2MV?lIy?Hlm8YC%98mzGL%{vBdGb~$dLM7c zm6C3DAhik>(PVeL@~$}q=9}H8Z>&hYe8DrThkE&p2kxO>xAVip)Qh%$c$j+K#!$b) zy?oG(c@XU(=X+#AH;0^Woa-E{D=hiOdCZaD8q!nY$GE@{reC)RiTFTmo4!+K<9Tg6 zzXPm^({nz4P)4{jCwb^#ei%O11NZPFPW$0ue)LH{Jj@TiEg$6v6YMOLuURI?y)yaO zE0bccOg{I>MEH{|w}%IrdOnx!x=qNuN$tSqJ$`42Kx&H_z zzr^T(xB-fPGTQ(et4J(tVWR@5uF-q@rDUe!|V&pnHtV?0OZeRbNmCxem0xqf1b@jOz2AC z&GC!EglA-P&~U5N$5bh84&fn&nPPZX58T6)*z1RfnbKZ!iv7b(iPt<#iML(J?1Q`$ zVWz~Zke`KSi^a18c4r0flRC7S=RnReR4*3Ke_m-ENU@X62QHW~;1LUw;u4`w6EJ`C_XWV``Bvg6q5d{gE&3Kf}wHG#e&2zLFN3Z9@Cbt~{qP8b zEubI}c+&1fthqOSvf*sy0Pd(JQ1UmPewn@uD6bND%(1@ma@3ThMSr%#l@@pY5%h8A z%CM-k;a=b1p@2DI_!tk|!--Yqhle?lpZnoqPORgGlP4VOTMsMpODL|6tXN0cI1qK> z{S`W})P4f;?7&Tq^$8n<93xffck@J`NbyYQAzak(z&(UZ@WaD|TPywWFyV4J6OMU( zqh7q+))R*CXYHj#w_OZvf54>KiyZ=Yb30ZYhY-jA@W7dR zNtR-`ACA-$Tn_WYk$UcrX7@vM^F_3kuZ1(61L50KBOtR&;3>CdARO$1TZFoazR92PF9f>^#uMR}LC1d;!ozIR zLvBc>Y3O_pmCS7k!SD6JJ=|)?4-a!IY#%(q7&>BC<0Y90yLj2MyjB3McO0zw6b&7b zrvKty!*t>cJD*{E#=Bw|qMacf^$SA1F;h4SW%1r3S9Ix4@B96dB9!PMB0TaI;;q@?AXteP1{5 zYl``9hRcQ|^EkUn(@JPWJux#2;yVus9#&*b)P<~&&D2vp{h1Yli`)EgWQF_R0yz!Q z3h28*HZ`J|&W@Fdngofh0_a%B!_-!2%VcwpW6d*qq9=zP>#t#c=*u%S+{&%UkM)#? z4i7)pY7d+hj_Gdfhofki?o2;C%#Ubj_<0hqB@#QjsfQg=kJ*uR3_DBhr zB#qUsG#+Ql#X=9|az2Ni%*GH8`C<{1PYDrRg^DZhwaFgxJT(;OPciSGt60}YF7{yAm&EK`> zT~E7&@Zh~{{hl}p!h0uM@-~77&H>y5j}_>VADvnZEPc6!CQ2JRJdXko(|hl zQGqzT=R#`t>m}H0?;*>}UMmmW%iaz@Ji^{~KRm)-iILlr_8t=;G=l0^1`?Ta{DZbl zuMG1fo`*wMhIx`tLyO_a6LUKa@)idqbj=IktsWBKW;ET|uplq+VK_)5fyi$?6nHq1 zUwYuo3Gc`lGmM-NT-@sKkDPG-DUf-&(ZHD;>*O2F6Vq4?=|N9qHKYf8xq{S?xRA|Q z4c89{40rUTu%SNZQ$Zeh9A-=&@%IliW_`dS!`C9BoXMk@GkA*YfYv)~{g}&xP|z2BQPIlFOlxKfc98C9yOvOV|uTLAP-~uRS%pQqYY{G^TUxbg3G>s zI5Nil1&3@zfHjP{qX*fam5y6_u+q^3zHLmwC~;^06j;>&UQ#9d+%t5hYG8~#FYa)d zJ>Ve${^-t$KYX!vff*$4_K?ObGJKi`?qN~??uUn26u(8_PJCSGiZKC`pMEK%uL<1Z z8eKV-Rydp;r)jLVkzw(1p6RV-9=K2=&^xBcymR- z{S!BMI?JDp29=lfRw$nxSP|SupIG|8Q0cgUV}}hXQK!H1VD(U^V@|IUKkGpfnBwV= zR3mi+mpA$0BHVv6i17jZThw#t)qT;c*W&MOt?77glqiM?U5D7mv*8nuHW_$ zE|z-;FPwe}!mV1K33U49c_@+R7MBACvw>?vP zS=i@+^V(;UtYUl1}5fJU9#XkTD$A`-1XSer;ZQX6f0!YQ2LS0tiO^zzW*p<8tFz&&)! z*ZlA>-B!$TBTTpaKM&mk3!xDyXbtCQ1~xc&C8+prJYee*IDa>;J+JY-u;d=I_R$mp z3rK|$X9cQ8)}DB{L`{w1Kl*8v_?ckRq*;DA@<8xQ)YQ2DOb-v%1I$CFQ7d_$*%)j2 z8X6YaawelDam%f|L0BAAWD9Q)fAC4Y#W4Q{Ve-9^y+<_G7C-qBw!9|_-s8+xj=w*O zhS_SzY!LVUJYYsjO;NE3{ z>Y>*T1@a@xMs&&s9(p|V%M=fsHw>@7*Ef2kBG&o)hw0a7a*f$ylJWa;X2Z~fwZS75 zy!jJVHftG6g~wdywZ{IGRH9K@eb*(#BE25W%T}qMOcaY{#Hg?J!%-{*_jyzn3-=$x zY!L-=BC|yg)>yX2Oxp;y#@sTLtueDz$F;`MXp={@1+>QhgYG&oC>%|Zpe(P;^KfK6 z?58};kx25x!yIX^tMzas@KrS#an0X+Mb3AoY=PQ1pbUhP>l) z@^&O{rgm}0aIzoTJQRpjL2}4mUE!gOIbnEA{2%5-9`f{Ol_MF%mQ;l+GkhU4%8B^M z!wG&nhU^>Dzn@i(9`tJ-mBU;X1pw>5Gyy=5Fk6)0;h|6YRgTH`xy2Rgnl#RHj(kex zq@~oTf^`D?vV1;?U_Im)2R;ug7}2kHd*=1fuV41Saru${a`Shot=@h((ob;N(+@}b zxqlDHf5wFC16Mw4qIJQsBTiMuCjC!1azC13deA?> zta)gLx#b%;G7rr#tIT#T@ywEeXXtyeZcc+aegksmN5#S9XM4!^vX$k5d)a!y4-bn& zc+YlTww`y{+C}29wzJt{HlAU##cbfI&jgY5fG;FwK4}7(XlX| z=MrDrB|gDRyyYeSZ|~CY^DI66RRF7``A0DATMpO~%u}Vx! z|Bg%j8ysEm((mTzf|owT(FHx=r+q!?g`a)V1rJ?)DQ3J;gqN8ZuZ7HL(xdw;Fhg)L z*AGW#xc_XI8B}=Eqxrm}OG%IJhCd2%7tn)s2k&cUrklI3Plfpa9x<}wz9ymQS3L83 z_|P%#E6j)0)zcqUEz_k}cJ{-=d|3D;#m`KX(U*-XQ6sv;q$1qXOn(kkemu;KXa$oV z$1TkZ|1%wxLU>df7qP76TqT)%dqs^N*RZ z?gv&SB3PbcRpN#H+@nh3*@!A#8j33&56g#~6#7Eaum z&>vq0>e=CxemTvx+=J6YTWoblx^szSPk-JYM1%Go|6si&W%q~}Ry z4DA7HK1{k8=-%GD=vJLe6K7R3a2Mwkj{vNvqXJ-Z@s;zOZvqQa&0;(hhoPEx;l(3R z@I#=zZ$ZTQOV26JdFOeo!aT(^PXnF@@3pz}lo-7bcbPwQkrbB$?|u_#?Vs-Szf6bM ze!fM$qVd)}EQP^|m0T%^#Vm#A5-ZK}NJbH?WUDVU=j&&oH{2AzD-vxW|;&?w)(Mc^eNK!^~#Gu;yJQT`xmXE$^XBLz1$*^`>0r z8I>Pnwyz{6l%%W|9=*EZkxI1+y(z0GNvs!AseYex&V9D$ZjbWU^W1a3=llJh@A;nZ z`JV52i)cm9{SvX*SuB4qh=~MucGE)hOk*neDI(U*;r~J~g;X3bVOI&#PLP6Z`&UGo zrz00(cY64*h`uVWQY-tbs?KGi?}i4UB}SQ^8-me_mKf{TL(^EISTor))9Y#3K@LSZ zb7Bn+W%`Xy)BGlzCQ6FX2S2L12+c2CO(Tjc*M&!`3-2b)f(cp$!lXlXhsgo1U@DM;huCp*ER)nALZuU)l%gY~qlCEeiDrl$;an;c7 z7@ifot*oK7TWX1Y(5WI~pVh0#AM6OxK2b&20g8~8z#rPYOP>9SZirZEp3@0Y@=OB{c3Azo=lonTT6}0;HqTh zJE-D#gwy<%B}`SkG*yUt$R;2G zX$|8$@S(Q1`&P#|eHYP*w7Obs`mu8U)J2H= z7Un2S7xxRY%&**exZ1n+K-QY3)zvCZrR3r1@HMs9J3L_g=3^B)cPk@Tbj9mJx;WmN zsL{n;%ikf@vX+JluPrzBmr9hlTuc}^AC72*sIHV97X7NLt~sv;(>7<#yeEVL*2FUm z?MhDyc8zKeHR4NZp>1ORj$OAj_os-~!Il>&>?z?<<5*Z#%j4E`;gUQP3EjeRl&Z1t zsGEq5OO->$LP=rh1t<)1B!0{pm%gi%_-~a>pVbZStZw0a7u?wj(HsqPnlUX|)woG< zdX}#qY)}Xcj>KmikGSmW%=%s<5#|Sv&!W6=6U4OG#8Xx+&b$01!K!OgC0kOaXGm7< zw17)w@bK6f>rbPqH-;^?m;AF1cSZ5(Wr9PjxOK37EWCaEEC5>vJZFga}|Gq#Q zU|v<(zpa9hR(_nf@T53m`utk&A*Bp82TMe_U`2{a?tZW+Cb? z35;{8zYxFmL3jdK(6H-jm*Z9;m<^oSyja22qy7D(g~r z6hm5$Sx5Mpc41WnjJ-6cZqTYQh&41%SyIEYbNk08e(BX?JXJWXhcQZMg*5(r#PzOr zu%5d>O`ei9=^J8vWOasD8lPT98Q&_0%hWgr8kHWEz`bg={lB{bqie>T)U?&wULO1adPP%lT$&SZLS2xAlxtDSZi3k_a}7P~2= zm_IpAYwE!??8?Sk942dG+9a@>SA~L2Ypflq7jF!D!FNoFc#@%6bnFK*u$@~x*EWgD z+GvfMiVvknUg8^y*W>Zrg7?`-ywRr2763+xcsmSN*aF%p6|c9g5+8jvD^Re@-(KxBRF0sDbs9D@_*q%avwvMCMXgnkmwrccqE4rn?40B4+6X7hs|&d}+-z+pd{r zu5_h|nksHM$;^DIdRYQ_ZSmn~?WZmb76(w8Q*N3TKiBHu%CkkD=}IdRX+Bq)6x|E1 zG)Z`^D=mYUwf4Bu1PxPm2f8#(Yc@AgP#ENbGDX@>SDJvcr@7K3w#_xutQ%ZuqOA3< zD=k;h$aL#q-+i?Hr`dt+FWD9HHIc z1(?Cp%tNlU0+IH;D^0*Df4b62IGk0_l~%^nlw(zC(LqyY4k*4vOPzA?c=uwAPI~bo z{_Bm*zX?9F$7^IOg~mK*GGM(_RbElL7jbw-81+=I4<;1%O2l>MW_0(nGVh>;$Ph-l z(7cFeDEBh0={5N^$pO?w&U~&Wxs4cP&1xv~o*+9NYCWrdO`N6GaM~`Vk!)t-QJI2j zI3r4A-b7q#0vxU?^j*{4$E!a49yknDdC8*gd8=i?W0+%9XLR=}!D#B4(={2*t;VRb zmJ)kvEe(OR?+RIPqEWLTTv?aYtd+byuRX}R=W`~{-pz}kJ;#blxueli-9)lt)2&5SR;FIZKZida1ezv+mh#lh^}*Dw_?)|OgY%h&SKY^Z^;jjj)f4h;(IzLa1KfQNuG$*o&JR2#^5+`)=}cs_RKr_e&EXFL;h9n{I1Uh(cA(w(42+% z8J~|g=mfUDZfM{04)kT1;&5uc-T4P!aPlwbVI|~W>CQj%Vvw5AjWd0PLk8fX!W+Kb z0qceP$2ikqC$x1N`GaU~0h+n_rh^7D2nFl9!vO=Axttq_GBkhVOHO_tM@i6Dq4@`2 zcJd*G3eE;}Av8bmipYl&_2b4I0MNEjfRxu91euN!K$AoBC%*3F_jk&-b>|0mI{5>f z3bc0TcYTBB&xH~Vbd)5;4RA~VARnzRlq}huzipR8;A*G6TDtQO?soE_Ric6|-1%Jt z$Zw^9z+i|_g#?75$`yH?$e5wdE_1*ci-gWZP8AWHP=guGgo|8Y!DPPB(e@y11!O`1=JZiZC zGRqtUBb)|{a_4XRz{!U-5#|(g3-wH zxbqGka`IpcEl;5iwZh$&q?DVUQrE7A1?R~k3HysxBSW*w>NZe&ywwjJVr!hMuJ)GW6T zCED?GSw9BltS+>^pE`m$BLaQFy3dt@`PdQ6H{6`L8QpzQ=514Iwr<1$CvQPbq4oVx z<~8~;Oy$dD-o#%itEbjbO2T)lrrJSjLB~sKv};Z(ksK^=HMLZOeNsy7ewR}wE4$ap zYtKzqWn~Si274qk2O}gilbF-ga8U}tOm0Y1E5WI@m}xuA;BCnoI{CWH>-uR;waa@| zGUJ<$=B&ZY%Z`qGS5q?C)g|Ma{7Hg=`C*#nMVWW(p_+Ml&&#|NSlcG9 zMKvqZcRe-hz?#ez-lp%SRymebiAZG%?N8V0rcOL6TQAh~WmOZJy++I>C;n8kp{;75 z%Bq_3J@&J!Q%m_Sm27VOAx!_nE21!Hsk8p5$yz}*diFA~)^aX4I=+;N|J2OOvqHtl+nvhNwdlEldNt)!T8+NFz(rpeOLjYYWmWG&zsI0= zuk3k&X*Kiu-Yt2X_?ugd^r*TRXj>D__p7-*1Md5N6^2JX9qoh&68ZADyC|l+^yE0^6YqHm9 z3AFb{Elyr6h%2J3N!oDvVc}@!P1^03NLsO+mNyF5tjDHAT$rBi#SQ%$-Z>B}4+dFV zwG{cGFgo`rrqUwEQYmq@78{l=+{q)@nzA~`mV!IYE7`)nvhr)R5p=4wGW#@*daM%j zNlF|UWWXxNPH?S*Bd#xS50RSFEGVvtZ+iL5PjE;>#PvB9tarr4^IYQkgsc--&z17P zttX4MOX8D3wv))b z@sh9n&%u|(cw-1(_Q>MH=p!;Ct7abwM^3pmgjuBztsbYPrJ7f|`P{Zk@|h^xTM$sL zxGL3Wq)>>0?x)(%1evwoaxilx_mIPd^jn*0MvmwO^JU=iXA!Mi4SWLr&%b*p03W=6OOKuPbEXOqM@e1Fozcs7C1h| zkjxe>lFTBS&ilTAv+ofVYMjEHL586$YF`)<@vRi|AjBbaU|le#Gz^X@ znd_z1&6eVj1t#E$_MkYb#uS-1o?GM&5;OMDVNAh24}$+ul=u*|OnfNUb29GXBpfLm zpD*pN-N$dn?j_M!eJEp7kXyT&jXCq8RJBlUt?)KRuz~ycg^js+5^RhuYz%H+>quF* zYSYu~FqS180TVA0b5kvA*;I}d5`AOZvK1CxRvFui!*~d?lo$OIFY0nR@dNjhpgy>F zu*xlvIV#nDt`Z$g{dlg-ztDm0L3t=YiMFp)=3^Kec-xnS>c^?D$}A}0aaf_u)BR9p zk)j;u${cJ$7z(b@BFDsj-JhY+lC_UHVYfzyBd#0_)#!J4p^MPyeWF(XuF-obBcOfd zFuj8s-mJAt;T{Lx0}6KSGbK)M3DITc1uFe1sLR!QiBd}CKf$}$e6!Zvvn50hIJR9S z2W12A**8%VpxUmkDTZ)VanEs8$5sk1P7K!n{#y)iNQ4+NxF+FIKDz*_AwHCQMd?b_ zIQWiZ7Njs_fxE)0hRmDERRa%Xa?Chpk~o8#xZ9*4M52lP%UlqXmcuZM6f3)?IKt6| zoyeN0t-976_MeiFym0Fgfq6oB6DMh7$J_*%ILTUXTKrK^5>_ww_%!@IX*3FCCy@nu zh8>?|-lfuLq#Zyfk+ix}!F{~T;+6yM$^U^IM*?kX4o%_cDUNp{&?$HWg_}4@EzZqt z;1!pNlLf+iCo)fXCm5f;2y%t1O3VST6cxv()juPGn#t>RS<-b;{!q3#~ z45ma9&1o8V1{O+u;4z@wGtQJKH~?V-o#g5Stv(Y(VSdZ|){y96CMG#u&ce(HNW2k0 z;jA{xL3xnM&j#_EA5r9Q+9OT{;B>&2MDyufrZYNDWKzX*(Xc_>_FgLc4V!8T_%9MpGxk<49a>?I#yDk`PEbb zFHZ33vEx`taV@y8;^O8&67Vt602XH11vcRaY0+xBh#f19f$&jx^c)gUb_^<|1?kdb6%zibc z8jcdq!wRX2!gg0WScgLmM+*j2a(h&^e9*=X-!8kBjWrP1 zI9a`~!`e8RcZ84i36wN2$SvNz6a&71o)(3wYMg-SvyWWQLPThnF>hHV5zMq`q5 zlNGFw^(@V?FxJTIO}KqQi%&Rnx4_DJW91v?Ukn_2T!@H+s2{FrM*U_v9rUr9RSUdhh54}1tOh}wU4*J}!;&q{pnx$S>7vK+z|K{v4dgi7s;OrT)Ygi?4)@;09`x-=f z?RvN@6KLvsE!lH(*zmigF^=r@I5{vTBw{U*4(EaQn`rw6;JKC#Y|vVJ2Jv|GPS2IJ zZ!j8Og7uV|9F)$)t+L@Oq;v!f0vzGumNKuq9ML9SgO-;VJ4+)bK9qDmNI3GaQ#mcS z*$qd}#QpDld=MDS#x(H$Ah%W{(Uz5grNC3NEuHaK7Ql^~Va%D#i;-61%lm`eDs@5{ z&orc|c=iGGG0DGDvkAiywf>S#n7f(#+dpyR8x-&VSYX zFR#gRIC^#uxn5{L#|>zE?ob9ro8}g6=3|oEa%tXVjavVUXj@6q#>01XMB6e{v`uC2 z6RxGKUc;I!ha;*q;8GSb>3$wvs;;bagj;nFzTi?_0i$@rs;JI6u%bFsJ8@efA+Xqsrj;k(U5XB8Q%*nh`F4Y$F z+avJRCB`kGQpGECJPamtusmE{s^RG2;>>E3X;B=9ZAJ7*eAsv(eF-8v67fS}qersT zLg`ViS`ut_Oss@QSU~C zGsvjbm-~MKnS-U5sl%a|60D26!8g7n8{C;s2pGF#*anw*>0}*3gV!2?2A3GyQHjmN z)hTk```HLM2{I?4W`l>LXTe%H(Uaa1C!(miqbns^i&l@;T6UH=qXhr8heu&AYLke~ zp&J;SAP=8u2w1#_4(~fC;)qZY|8)@}evGR@HZ>lL@QI}TGj$nTDdN+WF19m!5HQwP zH2LeGu0*?^()v zn-4#msbW9W1b45%eqjL+Q<>_qhH$v?+_x}Ym(SPwIL)w>uP}qN#lR4YCdFti$70S8MV z)}SN?zU=$&OK}2DnII~3p^&I#U_1|ruBDG>X;(YPg@;g^*;>j-i2|ESJX%h}%$9i@ z(KWCG&8ug=54mWCx`mx=!pFLX!&FV`?B)ViYzhtPf78B$LW;-5D%yt^4MC5JM zf?JUIayv+8JEW~-YIcu?tIIggcs~WC`#13M_4W|{uz{@cz1m&$%i~zWmgsSdI-e)L zU82Rc6DhU^f+0J(irxYaOmt1TlS{y0hgrCtTrv+k%(!PZdL8cUaRsxbC+-A6*dCA}l`;`J~gk`#9&LX>>gyI>wl?l@|)0N&6Fvx7qB zeJquH$dF3rKMK)wTwyF0TLr9wrwjNRTsRxHHJnuXa~5{@qJCK2MWMR&XJKgA*7Og`JW@Vcvj!3|G*1-icYuqN{YqH!A1 z>(^^d+evy8-Ga$n>(Urm6c;LlS(ul3*>Yii%J0w^kz(E`r6aRPO6katVIdkLQtZK% zOvMIw--P49ygEcgmdOi=zH*^8BY|AO;_`oq$i7^z8A<*+NMBd7hB;5DuRHN|m#-@e zvqE%Z;H&=Wp&7_+vb1>7X?&gLgWj2rt6rvDZ6|pKUKCJ3fo!vDV zHN#JJBr<2J)BpWo3*u56F-w;W;^YH&$|bFEQ=KsMlppw12jPSxlz2=_Q_aIP_?VWO zZi}c&PVE%#k6k!AC}=4kQ^_&z3VcN7aqbGh_^q5`2~#Li%+)m& zI~)hW-6s;wfA2mKaR0IUL^ANORP0i&e#-rF=~{f4*nJYJ*j;x>eQ}nqWr4fHDz?m< zC8x#>K80W;#yh3Hh!5+wkfm#x4M(NAiiaa=kC(fvMIn2*++8hk4uLd7#^kO6IVL;1 zt0k4Juw$~!yGD-5`s+cKEj(vfxy4!%>?^leiw~tIC+HrI!x6PEl_8U?^E_bLfi`T$ zG(@6Hqq5DIhDiF@dIJ8Vx!V6rP+Y)TDb(s|twTLoFi8~DQzEGJw05m(H>1+0wc8~L zTm{r>3!Ekasdy{r?7f^6Lk6fNB6u~SjehWD+2~GhkSO5QgxOdt^PGM2^X;Gn%|AmM z{frDyOIq+{s<(GIdhlh$W<62JK2m%LT~`vrX8KTOk3A!qbp~q*|Jj9^wLj*wPF#*A zbpJpIpXPf~Iq&!w9aUx{N?V=TaP+J_AD;9md(^m7)#ZI4@uDBQf`E)${f!FzPQ+zVIq!}9u;5_{B zI)Bnkq_%60R7P|8PbPiDe|*$Bfx|4NISGKt^uM3L@;sgt8k)#v0O-v`wpI$Wl|!yeZ41 zz9q}-eVZS+uROCU*tedim=0ms&kbICyItbYcSsyT_RsE+bSpyWnlDSb0e(CkqMtpD z|9T_$;t*Gc>NT>QOINtqa4e=IgQcl~J+wcAC0x6Gm&4<3r(UPU`A;JzMAX)^u5*4H zISt<$*8#Q8j2|8=qKZpc0u-ZO21J*6t8*@GieyK>O?*e{Q~7NQTpU#`U~l9tfYz+0 z8KuG2STDtKc7wyNqZxajklIxmifauQN6XIQoFltKG7&11To4bHiTQBwa2ze_z&e5d zS30n!QGr~+H?AZ((t*WA`=-m!y)%l_S!{G*rt>+A67d}sm>q<^GMz);<76X7lg{GR zz4y_abe1r8?;OY%C)q8WCe07IKqGL!gxBZFlkOJI@;mul-aclDiW~X!_`yY#$65Z+ zeBXSTzc-KT8uD?LKQuqEK;+Lg^n3>ZXZb?`*g}aw=O;&TnSh1k(ysgmWqyAgkrf0C zcYfx>GCv;&Kuyj76IYuE=6(N@d3%@OrU9PG&+&&M4=i<%FO#*iJynG>m&-i85SkCo z2Zm5Tq0`-nML{M}iA`3qMCs1X#^g*BPd|C!|W zZzx`Uo|>G-f6-gp1exl#rINu&{b|7*%K*`!;qh&f4EEpbFb0EVLt~-htvq=0S{T0> zLB_~@K#vtx6=r>5N7f>BuVe6n#&h-?vPYN79xcjSqlEEP1I1L@nZ-6>D)sSvH2M)|avF>KWYUdKpXeY@~-TV++;2@Aw;D&SpoVw>{ifjCx1=2|aZ%8Z^jXn-HBsP$@C;I4xexk(Z{AVIXWU|{Z(oM_6*Kndt_D%h& z%fw~lWzxg_*)$OOvp-7)Y>NS`DHynXfIyHlfZeAaE2r`SEFN6{Ie^^-&=~{Sdq%;Z z*wAC|@(;Xe^2Tx_WFS(vo z>DosBxWVkG+QfZJxsFwYY%$aSiN;>X@UB8H|M~0SeyJ9=REO7-aK(zw%%2LLc=V3Q1$jR7jbInH9LPSA*u_84!*4vY9#YRCgFlKt!ME zvFy7-HjjDrpA2!`b{1#DYKDhASwd0`0)G~=QkBCxN?VT-hp-W<@>P)Hn6a#NQgw>T z_?!f$aW2T>9N4>yZ(#8a#MS45G6||UWLGwprT!;X%pC+(zR9ynHZ`c4*WmR6y^5+* zDyg0f)>l%s&X6^nrG*jZFC(}xUkW9H26%cTZ-C=;bY$2TXgvyr_>Rth;Y>-*iFe6k z5#^3yv9avOAZt}kfjP%TH3g!g5Xwl;@*w4~EnzpPY>8an64op!lcPbxQYOkPq9ww} zghun~%?%QPQZ}KJLs{J#(pUcB7wZb?3rhBQNr~U>9NOjxgxtWA{^DKORg%T+))ysNGhdQ6v5T~-QLnA8tyUnphh;4e3E9sHi!j|;1V)5f8Yg@x5B zc2THxHZSxwWoL&iv_2b!*pF0uJj4vJ3FFxidLV~IV!Bi)ULwEKL#CJ$_d|_nZ4PTm z72{dmbo-Lz)aNjity8>w*i-m#XiYsBPAbdxqO$Rr=%p3k%oQG2{mWd@ECRdPgA&KX zowZs?kYhDL>`ok{8QD3^+aV!HyinuBmx1^K=@{fQbajrtW03I<#S>U}Ph*;z!_5zr zK9n__D_)ty+K4)-2$)Ks6K)_Yu@b1Br?%t}2DC;c;zcD0^crI{+B$)aM0@!oC$ead ziW~DAPGaLi#{d&tVjWrtz<$8LcoOU7QSCQq|1E5}ig-cxWOg;Yfu|?4R~zjq#IsZY zug^mdPLb>Ub8cnbJj^UiUbdLtzlF7>@+k}#&o8FL+t@}!*jIZV?Z1sZT!U_XiNs3u z=T2ppfo=|Mxt-zdz-&5tJG-`}ubvoQ@)<5z#@bbu@S~dW%W|D`8hQt7*OE1opT5S0 zEGt5SDdOFfAlO=fUFAFPfN6Xzkzi(wxO$flVr+P{lV1mph=azgTX{7vW9d#ld8e^) zqkZ|6mvKw=Ih_;9bpF;yp)VR@!pJJ6+7AwF1b_1aml3d>`I^>!czY!xvnXUFb}sdn z@F!^hG&a8h#~%Ycnu7;x?%BC4Hr;9sJQ0Oj48NsIt%)nN3>thxF1vvqoWUll)?u8u zV@V#Hmfp$Qsa722&VUj9E0^8jd0%9y2+$WG&l64NO!k1P>~fNSm&t!oV#nx*RP#ld zZ2iEK5hXueiK!L+ekZ%i|N2b$YUuebX0s#s`DZr!P7SoD<9D%ZRcy4W_>dhlq|mld z*(#$W4ZnxopjtR`a1YB@1L-vQK9)u|-^;SpKn9h}Vd?bsy=<}?=)`mGRasY=c=kS) z3+=pR4h&472Txn0Dr1ECQ3JREe+Wxe1HGu=eyFIA-n^f6uAgc0RxHd9q>9#D$f(u> z>=wyuJ6iJqTL8%9xp3D6`>FKCT(&Ow|3QltMa{aJJGfrVyi`KP4}YNl9T35Pj2IxE?!^IeDwJ|IF6b0+dOt9dTjUk zY*1ZRKRJDTW_QkLt-x?9n9uHLlsSeYNKWcKBUsqWeB{kz{f$KKQJQa4b{@N0#m@IF zd5|;C*`3d0<7KAuGEG>3Ok4?2x_}K)%~PcLSf?hw8*vKIG|A~LGchUXFSv^G z(RDu7RP~Lcf_(UE5BXRtu(;I+7JYQu$6Bj_$ug^3KFd%uF*pJ)%3i>E=6o&9hi{C? zS3U=wQM?dH`Y&WJs(6U?{6cm!Dmrcvi)-%7PflFcKRLAe-?pOEoftzq)`*9%iwqj{jknobH?JWuAU=PHD?$=(dBt zo}Z8FXdxFJm-p*RT(XBd{H>|vN4*)fTFe@V&Mq@4QH*rSG;lFXQgNZj)Wz(wG#_T# zFa#pcY*wh@fvnm<7&>W^ZV3_PcsVpdF1`&TcTWxQ1Dm`*$p7brE$1bRoMb9CVKrY@&ol%zwiQ z)(xx+JI3EOl02-0olNvb!%p(~URC;+q!qCtHQ<$Hcz>mFO?a%cSw-wK&dk_ic5gUl zju$hmg~u$Ftg%vN5AeoDN^0PO3a*TKmOUds>`~NjD|`t1PWogkTT)la z<-Qrkh?}CP(achY;~_$%%c!iBHIg4nf&XMF(>-;~kx*_2+!|5*JiE4mb$#JOfBaLp zK=XW49R2sSinZsd^a(buq9+4j21xsZDP zM*X&+pO`;+qkfm1$3}tkai=N!c{Z~7p2A12uEsffsvw9s?1AT@E_O8ae1YNq2hjny z(}Wk;Ue*4V+P}!+laxQa%=9E{8&Jg+=uX&Ofbfum0DNGlaOvGzv!c?-NLu_NJEWS& z{S&sa5gt{UN3U*2aNpccUHn*A;U1r##p`&=j+e^rr?sKde$g5=-oYNNZcWgWD|j>7 zqiO#Rh6TiDx4*<*hzJGajex31uz3IeSJ~GQ*yy~~=I$u&p8HI1GFqc#M~Jw^KiEWVDC z>5Yo|vv5I_@=ZdN|GvHK7d-NZZ8UGO%T#j(ZF!5`p<*Ym^)@_|tKVi_RI8YOuSh)D$UD$hb5=|Xow3LZ(hXvx# z-erwd6FY7P7#*FQF*0ZLdn{44N6?)2*ecb!qWCJKC0+VHYogkhQqQZ58~x9{&o**L zY~%;*AIN{?ha!|S_d_;~2Y6swPN+8GZQKQ`a{yLFImcbFuKvdku=&+vMcfFA$ec2h zdVI{TX=?MjSslE3Z)YR|fJigjQ_08dRwG7Og>Nb56Zj*1GVuvpj^-Nl85VC6K4pCk zdA6+q2S}&lPf-~KyPqnd-t=Vpy`Qu9J@o@GNHdn{m)06H(Zg&Ia9#NY+?0cRY3vsu zvGGmX@&(Ip&USN`jE{~oT4V(<%N4ycxDeR`VwaI*lsHQlJ&vL(=T5_ zHv{`<@DVIvO{BF)u%6}HMUBhh;U3&Y{mR*pq`Vbz5n}94iCZ7RgSDpo?YqqRT|qm_ zS${SEtKzR%*SL=aOufoL9A`lHz3m_T6&5M0D|=A7<|Z1IgLZ6mlpU4MoAp}pF?LE- z%DBx=RWotT+IkV0yYgF1DjD7NE$iGMa7aqX_omQIT;`jO{pBCj1w%iWli*z0l5O+=@k0sJIGIY%0(@yIyI$j zWtgObKWT42Oy=W!KK_1?teB5WE&70L@D;9R?Z4+W!xE8O9^ZV=E{_)vN`}?|8=$ff z6W;*kya2k%C*UVb)t>LdS(AUYlK*nS{{)Bs{bBguEC?q3m+1IOfFbO9LsZ(vJqRI{ zs=K($Ztb{tSi(b4POr+C2VLppzobqd$~=4tdXGKcH9KnUel@Pc?=q|8|zJ6Oo#D3#l()gM@{v2UjXf3Pp9|KF@>a)lsfAsVI^^7|$mZi|jceM8Sn?QL`y z-NyGdE%=*#ttta)@;~qx0xfC7KWus3Kub*JBRPzhO*~c9PoETK_EPk!KAl6hTBk|K zji>!RJ^CFUo|qIYKKv)zq3Sn{t~qflWVvt$J4Ta;M=PyFAd9o52XJ9@35G`=slse@ zsEAyQb4IH_jnET3jr>a^bR$Bw0=%=f_MDRwhu`VAu6M&ck`fKQQUNyP?dcd2HPywtBWEHZqlm60f=tgTimD~gx;g%(AHFSS1kr7)zpX)TE6 zrGBPYqr;Xeu7yIlEy7)BM=hO)j850mJBO=Pm)d%N&dHqG`UsBufcQO2?d$OGUul8( zJ>x%IM{gkJ%N2F?u=C~YdU`^m{77%36s5EN1THn!6+c1-h50%a*3&0fcM{M|OSo~v zDd2`NdM8!6j0VPVR?bpEj6Sj&IPbjz-1@ks2F$Yc9Mrtgl~clnOOI z@89p$AHvMwdm7b9f5a#~&%1Fvool4u;4E3zp;57@-lAGm8mr?P2VTxT>pvQ+*Y_A@ z&IILroSv@QuTcBO`n}PasX`C(1L;)S7rwQ@;U@B;% z_fog<7tHiKTUQ7s%k$cM^oT*d^_-PG<8opK@!Og7Lhk3uj^BkQx7Ay=%N7URew?Oc zrR2ocikIETR|lOAZhi&=aO)f!lv$q=o9PLvMRcI8-bve5r!bnBg$&0U(LT)w+pgqzmV4fYz_vSE3Rmr6F=DNX45vP zOMAVgA=t$7*;xKjAewa;EoiT|bv~}A7u)N%%VQ^4d1%u??-qN3S`;MmT8yC;9rPaO=v5b{;*C3$nrGO>V=g1Jx&D}8bK+)KI@(;nHUiw! z_+-72Es!$*f)(sS@ApV;J zXl#ohlroi8w9xM{L=KJ~G)#n!O6|Rh`XydiEz!A}80Dfxrc-GmbW@ZvYx{pq)R%cK zkv#Nt=~fKq%RY)`SzgJwq?N=~q%oDY!p!}HB>jI}SBSSWv6YN7MIhkXL2QV(H7QrI*<|+ zh^0~ORQ=xApx$90ktrm27qn|9CAQS3Qe_=e=hoIkB|TtYl{cuYhu$YaIgp&#&y%dK;A=rK zUN$d68biU$E0l4m{&sq119$;2lyZL!)}lN@`}IsLs`1#c%#-}vT`1;HqZ#G?Z8W5^ zn>~%FPB*>1L;EW-yXk#Ydo3;Krtej)%`~_>I*hf1R(99(FXMFXj0nxglb+e?32&5WgUFk&_b}}~G&WQJTD3kSv%iiA%0VjV4~du`(1HH?lU?^z z6?39x*}Rx}2Y27$#;1F+5XrA35|K24l0P~=K)+12chboL@Egom{9Oj>t1#>@_aiL5 z*HafOGD+)ni8*iyZ5X6?aGq_PhrmHJ=6C#27@Y(udoGL={MEtw z=yc_FwCf3UpoW0Q?n5lz3V7?bLg3)#fvbs3GpA6$Yfw9LqJPCT`YmeZGIL$nbBB)g ztv@D9Pg7MmBt3`dV>nCGK>J4O>9NYrAZ{-|7cS-T8r2@9_er;2N^a9}P;y%D zLCNh~4hq(%N_8*?(-kJ)jy=n3d`YG6jk)!o? zs;@IG7_FaD&vf?B9HXB_^NjRQy-9x$EBTjE&uo2BGmZumjy_&Jv1-Ec3-7jlqv+&# zy-8eOKKs~R5cdsF%*&F$yKf+C2WyO&t{$JsT@D1b#eDCN8ll}5a+6O{;eucP@ji$+ z?HcX8C?L{tmw)bJY}nY7ttT{yc*>zNO8!RVgs{*zm^s|Z%r5T2a1qnZdTj(w$K0$p z?SHnj*lo#I^dj>+$=#N@h%8~Zr4QBgWuEWOU3WdUllYCy@67k-dJROM_-;#41Doj8 zoAngAXRq&chgOoqSUZ|CUQZap`n&g`W4|evqwiQBNnmzg{)_$a{Uo9Onb>cN73oqi zg9lYaWX-%cFXTZLvdW^GQ12XlbM+|#qV!p!8$9XPCg`yS%x}}%^rzLL5&nI*>2*BP z=}=PW@KpU~)tW-)?NEB$Q#JK=*b(^fn{LW<_$o{8{qYL2Hs-HU9MhM zb871EcZZ(lQD=>$+-W+G2uI}VALHlqT>Ts9*3LWizonyP`)JQ}eTa&Cni|i5BZU5x zHA9kJJOdp87ca%k)MLX;A^bgN>d_vAb^FfJ-&8l=;IBPfPx7dlSNSvU(r@ypzN`HO zckB5cOl;%s)!*l<2;beO-&OzM)l%bq*GP?LG;I!ij%oMnEmYrF>?F|RJ2e``cmBvG z@r~h4m7Mej-o3G$w9JuCGl^g5%4j-_a?#c)2uW-KrmT-Jz#hgbh~Y;=8gJrmjX8RJ z-G$?mQ@>KXi?oH=l=!*cyq%a0=8sEm|ACU6#-G`NI<*OsZ!|iDm76FLWYW9cAhjd^ zMyVZ7;K4H!L~^Beh=84P4yu1Brx?4j(^To(&Tl`U|E;RNNo3E{W19qWWU1l_PN|8qluoDT>DQ_Gw~#p> zV{iUs+B9G9ALYBXJ2x^0qu=K1-J{uU^3!*lzek>~!nmBEo<2TieM<{`+~9sqdwlu{ z6&J^p=Ibx3xan@{LO250L)c>xcTk=!eo%ixRW|rHJ&4J?ig)45AL7F(F1UUeN`>up z3m(?jgoeNpMNepjwRLw0Or}qv!He}f8Z^okLdg$I=fChF?xp>U^{eCr(JZ2pC6K87 z67^^Tp8y@C;D6yKxw%W=_{sUi{k%|X&+^JL4VQ*5^XpRmF3SBE;Kq`v$tx^B$zLz&o|0P&Y*IRn!;zo~%6sE{Uk-S@}j4%z2SShSc zz0Sg-3zOy5_4}#SO1+(D5oN99ZLoz(R-*0fjdJnnwMTR;K0PKEpRQS@U(Gy={43Xj zIBI*cBy4Rf*6A%8Ep!0b2Paw9I;$%uV_& zXu?gK^cGQTrL6MTQrRZGT~vwu+>0wIpVE^rUB{Pc(E-In%W*G=;m{+=Z+je_)#J{~ z`$y)T!P?kUdQcJbU~rp4JDd&AM~V)KhTODrDG~ zD`ws0m@9pNopFV{@)2{L<+DX}_!&K+Pv&zRf!Dy}O?W7bAJg#q424Shii;T+WLAtY zd@Ef_U{7KGnSXL(;Yj1#%L16{JqxAYLsOsCXVl-9m&*2a{&uedrw)@OhMw@O9_QId zky`<@k9ur{Q>{R%TlE(BT)kCKO|nWPDjsv!;6Nk9q;TV)^yKNukwrL>Sr*;0Dd&^T zdX|g9o1bZmorN)C75X@_D^3Hj?g+^I+cMnTMA({6b`9emyQ~pBFwk*4ZFlKg^`P62bPM)FK2M zukO%CHs6>0INO(8!uI7f(ADmO8}`1#`9aEf39B#r3VlA*kFRwohLpR#iN?Of18z&{ z*O%Y{D2x3WFYAB9st@yLyowl5G?tfSBYa9LUenVWWPZlKVIRK`=?f9HFMAEy#%Rq=UUYpPXJ_yl^Ja`h0)D z0aW>P0z)Q_=6F=m$MyX0i$64)8{Aa#|A&p{l(|z+iO)>r@cv_|@Z+$-5M>-Z-&4#% zEcb5Q2@9Bcs@Mi=J}2!4TfdY?nPYY%F&~L3(-Up(xcHm^6o*2(g{JX3I z`}FZDR-oFvrGE`q&XHD!cl2$lo<>LC;e55D!TY(MU}m~sf1H2YWqM1x=3Tvss!XQR zgNVc}cvqiYnbZ6|o-;<~40|sm=SPtPW#?sDy{|WjQU)cbLOWSD{j(qQpdj-9z0Xnf zlYo2PNBhW}R7xt-8}iLu0>!X0eTtKVnRq&#FVnlFneDvndYq$+flk5Ll#38f8ajce zkoCs-xkOE-*==a-2bgLDbHN9wppA(1hx+Ah6KWQ>o7F6iTgWm#tSp{N4}A#6tcD!N zWobNwRGkML4y?fgHjHZ@g&?`~Tr~ko_oK*)oOW*LEB^=y5#H)$>O1bz~9+FZm6N&H2#5Nzp9So9O@-auehcDQ5^|j;sl5byJPod|x z7d9hO@4$ZxBlUDz@i}ZzX4mfAlo^4pbbx;cy2 zgv?ZH0OcNm2f2q<9?^%y;_+~HKr3W0SbDBTWg-IGtGJxc+%EUGFV{DtY)k(qUvU>E zvlmr-jjqTiSKsK{Ra}`Jd6Wkk|D+yAAs_o3jXkRW9Bq9c3?9&^V?6KyKl~UE+v)bAB5|kIW6!7?h-~snsclj2i%!B?F-@<6Cye+;1E$dZE zJkFOe;6@#X+iY*6#mDt0qRpo(Y4-dc8izxHx!Z!?>UcaDDnii-Z(LSg7fqU z4LboirI;3-03qxrJbpq?_CPSTPwK_d=1kWPGAcib8Rs6_^CK@aj?Vq4&&B86r#Px% z{4nuK@xO2{m&jb9^daw95eGoDS{|2W6tEmOQiK1iAp*Hq5|KfA{e6-CHf6N~+EP(5I zUQdfx?oLkZSSvZHcdg`By=x&fzPM5>7SFe5xbxRm0uG;gCW zf9ZaFp8QM4qV_Oa{WluYzK%}*t;h2n6OsQQBCGVFegEj6sb-g=4aOAQ6XK8Y7^&c{ zDfLi|`KsN3UR8}dRJ#_nk1(dIh>Dj)7@cBGkC%PL(DJptI5SSA!jvg=JiMzAwjk_Y@6@~WQnw`yeEjE#hQX;GZfXRiH* z*T;M7JUrbFc?pIs8{5}n5G`$j-s7a1JH5V!h}yr=v?@(`-Rs*Eg|y}&gkJUfj^YqY zC~@l*udfxNv2Vmwl{H`X`ntpx)?>YssuGo#XjEfxXFuvBLP}2W}GS3j^b* zc7oAO4UEUE(`ZY#Cm3DT0Ae6}j1+n+!MKyRcFz{Zz5I7hOC#0)Wea1qXgqwy^FOpQ z$(Ryr)SSYz0FF#C9#VZd{uL=kH#F1-v_I9@#dV>e zweb<}WfRg27=R-G$~2<`mQ01p;LuV#XeiDco@-|$rP*_!R&a;;?l{DHEe>Pd$IpBr zP4FPo%zOR)+8diaovd+Q)|)pWjIiw#FmJ-ajylQhJJ!Lt1m;5vTG*7IZuChrM}d$a zBHkPlgp`qJghpN$E_*mFPB)%V%|X=V64`ZTUScd4Vv6jDJ{D`$0(H(BnvQ$%oMkiG z->)*M_Iq~?XWHBp1ub5ou1))VsCYpps~q3(@3XI{fsVrXQ}uo?q`frtBxh zz!*X`yIgC`j<<(KG+C#?epH7WLVK>|_Um@hVf<~cGydkoQ=98i5vvVlUk`qvnX9ii z($V?qL$NV{n$CN?Lg`|td3<9#@0{%vSGZL z>`(k-M@S1u$4BzMgFA8i!MM%qE%aGbg1bPYjMPrnHYiRO)VDkG@a~4F;ETzr9lIvC zYS|U4+qD`?&yzjMNQ<+&HrXtpQ473uV+E^#Ffr$!#ml1EBzu_J&x7iO!YddiJm?R$CQPw_vy1$Trx+0)&oF<%ZN_+yoE7hVz<+M4 z@qkBV_tD*V7@JiDP)iDp8|eON#yx7_fBtjR40u&$I~f|Bc&CBWE=hj-PNN+c+{u~7 zT^fET++!Hg_??<(Y}QoeHGktpMgj)aN2$j{#%$Fp^p`$l>@pDWq?yZw!$3Qh8{azA z4ykOZAA?VlC)Gact@Q!6%Het&3~(aekth`Yo1FaGGB8sMEZRi|_pgr^p&fCqvSG3D zVM1U&!tW|3t5NaV>z#A2pUon|F17ur171 zOYFwMSqLg!Z48Ocf8G@iJp?}T^%tq}V~`B)=jibm%qor;EO^Yo%-g1;k3ssr$8jSW z1_a+S+O!51Hc&!kYmArG09@_bS~J?T*0{C-TkmkZ(c$riOhRw`Ks z4YU*K@H)6x+(mpGhSP$rdK~F{ZECjOD2@);Si3-{i^0zP^;iNaTW{0?j>GGr)tLxW zmh;6dEjb;?#(Z4G*kWPzVGnz&n7Lv;kd`YFR8F7~$;Z>8+_PI)E zmU&2mvCl>LSFowHsLalhUTjM!M^D7Wrto!a8*D%oOR)2jiL;SUbgndTq`nc)~E6}{}NE|QH>V2S(&Uav+;pIAZ{4Ic;LRa>LD8gz=d|QCg zsJD&Hb>(O^^%Y>%0o2p9f{g{$M_Ixc&mTdyT&S*%j>A(Js2f8 zEbklLJsOXf;^Oo7jg%%L_{z-=54?(CEo>tKv>Jl7$sSFFX}gvgsZBca$m4$iZsUOU zE&{OY2LNpSpMXj9@&`tTCQU8^u>Xff%O>3~0&p(?Y2-*hXB~-A^^8@zy~kLS;Zk^0Db&pwdxdqj6zc`0(j`M}A)| zHTF{=jlBq@#T;Nq0dpg-Nh9D97@>dKLPtTnep#1WF0p8 zHo-Qs3#&;gsb4@7hlFTi-zMq*fwtlcSRXvuD*LweC5S}*dy(QJfO+KK8JT|s;<@49 z@lZKObmM;jWtRhJ+0Kr9mQz^rL{xxfsZN4!MFuhP4%_+5j3;R;8;X@J~7h z750BxJ^9;XMpqj5KB8=zqUDHlWK&~fmy_=1RHzK2|%{H8h++rLM5X&9n5u;nL^G{}{7=mc=bT?`i^egI_h z1-U5r0o94W7)0Gp0@1{af!xj^vn~d*+mC>}{bC@ubI5)d1KI5qq=oI`(s&51-+Ky$ z$6QR|{-*(%dohrEIb{8df$U!aNd00U_f{CgJ-_&y{bVdOxKqPdiv#D3Te%Achwpj* z8{>&=OLhLhOc~eoR{VoSXWt*jUzIt}{27vyay}&In!iGF0)H7lIapKa%fF4q4uW)A z^^Y+OsQo~lAR?+DINza_3Kl*F4$ms|V;UzgSE92g%Cd=?;B0cgm9)+ab$Vj-W+u_I~ zq^?AZ35Gyyzvy2b8Hq&`3(jP8BxcKnv?V$cp~7W!0Kc*J68N}0?2UORBK9Sm8|49t zsTG-|nh#T#T9LhUb76Armdy#QwDqs66*z?t%;M51GA6PYf0lP( zOyr69%ypm@Nu|7;`D?ITq5gm3z6LIeYW;t9-Nl`m)j(bZL|k4}6jW4He5tkq!=j?1 z8x<8O6c!~Z7Tvga*DDwmw~2Dk>`MQa>z||M$%7 zvWHC#75(q$^Kj<-oadb9?VK}bW@m@^$0^avuq4pxw+Q`|>IU$y4);t-H%0>F~h6t*_hgl}7U{wSR92mF#!3p1eKu&y(&4 z#8AM0Df_|jho;sR-edT~OH)gxgGhrpj%p4Xg0R*>~_2zcc|_xV2nSjdOKF_^$cp6BZg|Nr{j&q;!3S~F(pR> z3yUZ(T0CDX%(FE|i<@;5thnKR2i|pg#)L)RC>I|Ml(RrQsKqZ-@zBqWTD_e*7mC*e z>T%y;gE|XTgLbN!(>GDtA`xGmy-Y=m#B==2klP-GY~nixr;FBF>Ru!+SH2~S74fYW zuGwS7*%Pdp=o2?KHy9{~Icd$HqF51M)un&6`J6wPK3AQPh98%RZ~NJ+5JGmB4?3Iy zV6W&}ECy=L_t{z&i@%+&)xS@Tw~7}nSn{0#lKw6()K1+^MXdaFH`)IV1ejTfj^KluZt6~M~)A8q*s;!KUS^=GBS zP5ORYZJ{_gMw3jncZeToH~nraxKo^`VNdKcjhpm(oBb~FZ2WA|X1G_3^uV*_F(lpw zSWDtNV>F^I{~<9FcTB0eLfnEPv*=g+cHs;Dz6ZAU8B%QB! zsaVTiF*ioR`mZ6I!^v77##z4iWlMcroUhe*QAw3J1x0O@ zh<9#~^-1w!%>-N9lZd#+o2*ZZ6Ezd?xTE;8*7^!1Rf}(E_4~=^88I|4bHBHtc1-Em zG~C@B%YKX`Gfj9B&zq8-5g*q!?WewHFfQ#6+LrxCyjp{9E1nf)Jbq2pHR8D_`dHy- zGe0NZrPugT%Zr$wc*Nx;@gdDLyzNFjT{DrgSrJS%b>dl?Db!mhPVx$2cdXY4f=2Z^ zemVth6;Gc!8!rhH@MOLg&*^9#rr;XrF)g0NS1@iWEwEX)BDR`^6m1hHX0oel%mPo` zfi!#A*f1&lFjnQ+;gO(MdH1t@GUQ5_mt$1k)Fmpf6Fe)P@nUWDOI03w|Fv18@_t=P zH8yd&=2Yb*Zu`|H#^Ww{94&hVV@V%RDX)mvYkspez9O#G1nZYOXOsFuAN$45v5BSk zY+LewvDRpXRkr$V;&|F5hg2^1>@9 z2xVa51lbx0BF*j#E3=`LtNRl!4MCeihPhB>PSgFaFvoMr-w%)Uy-IivAi3dRxTTb=Ttd719yE zni}55(%-Zi|NRfzGq0lol)?Jz*z@txs2%&QxzgO!)8q5gNor`Q)Ml`SG3fy$%K77;H|&7;_N;XvW7l>M%_ zR=fT->U>vRDJ{rRqpQD#65kWg)HdBlCGWvreLB^#GCtqd{+?K<8OuhnzA&FMTE#mQ zP}uYj>T4AjVWo}QB?b)f5_gFgY4!L=V7qXpvtmx}!U;;hiTpnR*56K9A3#m~9aQsy zh;JP3B;#&oUa|5`zwM6Q;;$GE-;nh~5!<#s>X#g6d?co8&23cmk@yq)y0`3O@guF> zX3K6DH*5TUEh*L8@dF6Vb*R8VZ@x8mJ@PuJ2?t6bKE}hZj?dvOGar7xIY!nuuH8xxL>FF7` z;mn@+wNF*Z#iSKFS@1xufao+6sF#Nv<9eeYx(uKaz z6lQu1`+JQCmK+bY+XZ1tITou_TZg!0!ur42n6Y?Hf|YoLAHU$(BL>clPr|znb!^hI z{)XD?<1cXb$@(ePHziZX9yW5zsdJCG8=kNxMNc-a3iR+$x-KkyRJr3h4e^S?%E#2` z3yZ1abMc3OMsMZ$UNd&+?8p1|?d)Y~W8xpcH%woM7r@czPOSLww^KYvTlk;NUyAtN zy;F?;Q^V(m8k+Wsx4BnatJLZ;oTc|Vd%`OUhieyTsFUI^|J;fF-$R|4zH)Yg>yodq zgu>ph6hr&J5-;HTtyH|ab*N!lm#g8YU1GEpf436%P5Mgm`C7y?nU9h6Yn+|X;n$en zg^!cxHyF2I=X`@H3S9k-I3Lv=--yB5!Y63p8=N7VDCt{~eI1qktr&c$oK}1*297T* zX1_OZB%q2KzlDOPYU=wI^He{DBD%$^L*8fK8snFGcxm$n;R)kh&8jo;z`BPY{*_46 zd&t}SRNXD!8K{2_!vNoSA=m7T7Qy8;@jDoX?y|pQ_SRF?cR1a=Pc7exlf?H+3x6F9 zi`x1g^?oPLqj}$n{#p!$W#41vDy*|relMPe=XkbL=MUmccAaMI5qEnvt@@W<^2SST z*(AXEd^`2_h)dyf)Q`{<|1l;0C|&_r{iFCfn*;DMY}&m}KTVjZ*ofjW8>d1SVIiUEZwzq-4{lN;|{yMul&9s@WF)Kk*`5Iscz6uMgYE znS~#PJ^rMC-;n=qV>5MA(>uynkFClt4{lISS;`EKf1i@PCBHNEZ{mwHtcGfEu^_w; z?T)v!nI9aI_h{P9PJfR7t8lFnO-KI}{u@qU$Ya`XSh<@%p`zc!&3+#Hhkeb&yx6pS z48{B(R{Krksfd+@<7^%O$A*mE@ebef_G5=GRFP?hw3NQuFMg%9rcv|nSfALtApb!3 z_S-4@599>bz~z77L{Nx-_x=aw0sjB0X@Fg|ET^miaR+;=N%R5nzVJd^ZkdEqorzry zVU$S><8g%d@yw%#7-Ii z;H+{`yhqcxHChVOYTlq^t+dke=as)ypN4akMx%~qLHYfKG7R;-33OgMWe?u3~fOM{1N)|Kk_38l1PjC2)NtgzA(R&27a@*i zVhlT1_M$6o(;^DeON#=UYJA{`AAv7kfz9#F(kmL&BQ8h&;zicyj*?N*F6)eLB;Y zKUTu;V3pA)6xd1(62AKup0t&VlB7Mq=~c(it-n$-!WIS(k9eHZv5+7%oA83Avy}Z_ zzcTqfHZA{i-NxS>b(jybgj+FZP@Pe_Tx-3-<~dHngCJ0nJzm12)+TBgF9pxE2eVi^ z-!opyUX)p>yssySyFg=JG1E6u9SZU1m*TC?RLh2%S-A=2tBK*<3>0!$7m+qdRf0nJ8FBLv1Eb_pq(qs8n z(gh&4@sCnW0Fqkx81)B8S8)529JW6Z0*3ZI*@4of(AF3z&H0nmDT-7R_GZRO62Hk& zI>Gj{SJZ2EeryPC<; z%|qQ?6s&Y-4^~>X2TN>|7%}C~=GvQw%*~miNZF^TZKgcm$izcNzQ;2Fvh$2`N za)|C8AL_1El`@5@Z9=*3CWJ|;+NLL&=Qlgb+2j{4B`}Z{?qb?Jrb-cb0(>(?PnYoS ztk)@Ty7VYq@sE&j5oM>82^L?xHL}wC_V~A`E<(BvKV7xq40j#Qd-pqj zyE;?y#W|kZW=iZ~iM&X*YBW<#q_kjc37eIImAWIPxAEkmtu9JZevHsQOTr@_c=7XW z>7VTRd)(DpYWsLL5`$+1m2Pc|qcM2UU)DTnID?zOCzl~i#K0%^aO zTF$|elxp)oS2{=1#{X{1xCF*)fBnN&b*Y30Wc7kA`Z8&$Mzdn`)kx9`Tgl}T9*%ON z`YSLzhfvg&(ryP5SKt;D)=Av7@6C`F+cK|~0#QZQG}a4MrAb$#(4|W&wR(*$D_weL z%;YOe^_9pT9;Z)J)}}gTZDJW6TZm^YGqI!61V@)a@>)|nGTD-6^6fYH- zRw&H>`VC=~4ku$abPV{%sJ=wDnkP@bBzfq)^+Z>!r!s$&;MtL-lACvCoHyGdVVt16Iedd*XmdZ#q$ z)Tf7Tutl>h*soSBVxk^}_m%2Baq}O)I#%k0t5_Yb=5>o${n+@+sP0ZFOe|G2n;o!x^Ibp>IMm{e>Gg$4At)VmqD;&a)k`<6{xl8h)XYZ1XVzNUn z1vieRQVpC+{ z9_j0FpGD(v{*$4$di_?1Ikr;0S?j3(*j3;3f?BVQueTN5$0m@Sic4|&6TYXUGU*!j z!@l}5WbQTcydOJ-*D30L>2%uCh_5V*?#Be(L2dVAF>a>Z&C>azek|LHd+Vd=_4N|= z2Aid6sKSfc-a*ku(q`?(FYwlUEGk%)!XLmE31#jBh|f-{en9$#Elw2=O1KgK1?4=1 zYGC_AN_F2u(if0wtB}6*vtGP$x(;9TnS@onPiq$;68L`&?@`Ocn8LVRei+k?{W{|j zDcDaqR~0pLqJ{5K@*|39-Xqd%Nl3=83S{qJb@)Bh!;+t$^-Q%%4&UT`>R?UY-~1@+ z{9KBDly$yDmF(ms<9AWUqmbN1MG%#QvmBj!Iy#@LHmTLPOmAwV9@eCdJS$o6OUPU) zO<$0P7qH^{9IKX0%6J!8+8pUjQ~1hQx2pGZm3a`KW~->g`AjR|TKsYJB@AwULc$A& z@Q$7Bxc6?yPmgeA=BaExf2X)7aGJ9ouz6Oo70do9Eqe+FLOW%#l6{@~lr#?yYu{&U z{*Sa4XNYt0Lw$6Q7o_GqkL}!#RPj9Q?jig07#nHSfnvcA>aAOLn^!S=;-Ab`+_CN% z8igM5X%w|Znk1$>y`!Wp(nO2mr1FL&rG?Nw)Iz`hbBAcBGVWDP$_;Qf8oc%KdmZ)o ze_pMQ|4U%ky4uHgsrBq1Y+>H0?Uewl?F)ag`7TFCoAkfoDsGHJKz-y?QK0`x?Vxa9 zDPG*_s8?=$s2%9Pbtw4W7F8<+;>SH0uNwSd*pUK(rNAsw>Wk9fwSpJ5zld3sMtLtG ztnb*WUXp&ocWGZ!*;XWxy*Xto5@P+r*1MG@#9nL*e^tUaXXcx!_`j@X9o7FAi+mcH z8<2?ul!_wYcYIsw{6)Wc$afa)5>#6pA=Lk$5(0rG%RFyLY$$~KekFuzeKc3^4B>vR z{cKk~3!xH0>~j!7wSAPU{!C{G_4vX7Ayfs_3uz_9TQk%S;xP_t@jfQSz=)v^m>=2O z;OzhvZIi-6h6WE#)=ueAr!=-xY1Fb!nxZ*KJ*?3mWOxnRH$BC^hBKL->Ryx9;DM9y z*CqBOYU=9{8AExmOY_Gq4Z}YYUE~K>JeDt|`q#0qSV{&vw!Noflc!y@ekR6S(}URP zDJv0<@lQwW(kcypgW4iZrBCeAOpTdz+oiL|ouQoD74Hhqpp@;>1-@}uF?Com*$Grq z$4=83)PPsFX_niP-jML+WCA7afISJ6y@TzF`>AUOW?cdq-jbI3Vmo6}wlnB@ENhQ% z0um_YEtr`=)o;P873ALxS65I%vvdoX_GWapf;yVj&XRXZ)A?TTjil1c`V~~NQ~DT^ zS#Lw#3MzgZHYJeh9qhVRQ0hAvxUi-D9ceoDSuN5kFJ)(i*Mm5s<#7(>w%`dh_8qM0xpJ35ki*1vcjRM>oGB0BBm$t5j zQ5Y4%L>mTQ>76^)dP|sn>VOFIy^4ve0)_^JbmUPlRgup3xs ztK5TFkGs9pU>0oCVcx%PCtJ(s(wZ@g$u^Zu`=$!z>H1FP=Nih6#KC{Kw9tUPH{)Bk zD6wMl9=I;g{ZcyHt7Q?3kH=HHlydCmuc+lqDa`8;mA$-5WpAo|`75b&q9u2xN$3FC zBTd4<43p3}>!gxJNQBZ1P(_4E@I2`TSWH6Cba)Tt<%mKwh>t)t_&gr%xDu`Fo4C8n_+Q$~wVJf^HfMOlIZFNgQ-ieKXMe!~g5lDujDtMdWHUN80r~$}7 zi$Ep3w!(;7l(8o`@g<6fUgcc~Tg7;>(2rL8tFBBc79{C?>!#;%G zXMss52Bm@cc5N_@$0I(r97P_p;k5vHPk7tmmV$y~jKGNV&pe7o1k#|W7T#vL8QyYxnsK9ZCn*qI$ty*Rh{7*%S zPD6>~2=iZ%<*x*evOa4mA_S^mViKZI{*?iizY;jwdIJ=9fZE`Fnp*@C!FTJ=;?6j3 zoQ%-tf_gx95U;Rn@o*erM*ew$(Ks$^YlEUVP%;-fR+oCbW8$y!&y*P8 zbv=ymN7-@i@D#B6fsOMKB;5`~f!uk`aM~OOYN>Y6>o9|AzDX z-yieqR&jbuR#Q$I1y3kaf^UqR1HG@59LWdLSF&$xgHlED0!J$ z7{}w|I<_1pxBl=v56U~Btk^9A=248mA@k2XYJ~woP*e;9T44z9WzFaraOnIqWvTGm zgwSWRax_CeEaF`L1$bp=IfpVv%OKdx(tu;Ln*mjjt-T5J8q~NJ^(aenkAW=5(#X-K zEC&k;sCx~jD#~Lqz;Y~&oNZE|*a*eV@IKou0u`up${nG!j6~?LGQ9}B=Q=0{nL)gw zxDgqE{PT^D_P88gw?c6al=-+tplu`u98dn4v2ln%EfkqR(QacYb_8SMxbn{o=z@|m z7}1Ba{>Gz@=F#WB44%dyFLYMTMntm7Cb2@$A;0YT7H3s(B@_lh86(3#uu>ulc{q-98DLTJT>;@Lq@oU#0V)6$7n}^@6#aiOz`}W1 zWyL+5f8m-Ql)Q1c_t9>6w4!6-J4%89_6whi+olx2ZMGYv! z-3-7#a2zJfw>$P@F8{0(0m>6WaY#W9O1|TEH(9>!n2-7Vvrfw3buW|$;aKMufn!#} zMcBO$ixFP&R1RSi3^>#@?1w=WcVNQ_s=X7}?B2`CXONh%z#!XvBHQ>lr@`%r(mQ}ROCjQ{~~y5 zLddJ2j8PGcNP+|Sg@?>{tI4p(u!{Js*bD^Q$>vL1Ap z{w#;9IBtH!Jy^n_I0;ecbBlm5WDxRy7|V{EpNG(wgZfwsK)jx67^h&%Ve-NYAM3FR zo~M-Ib}N)sxJ4k=5rGqye`a(G4Df-X0vJ#aLwH9jR0B?2{+Y6DcpZe$=d;oo@?jAl z<^1<@@DvXgQv6$ev<*893%LqHFejJx(AOVyO8Z84XBkd^X zF|1}#tV0y4-6Bwjx{>zdCTAIO!zhG45me1m0OC7JJ!S)tf4-w59k;=2Bhpm_Wl3%k z=s8vcMw)+Sm=&RKhN4(dw%fQ#I>s?E;`}oMOz^rDMnto+a^#U?Z4X07&VLO&%|Wi4 zp^Q;GI;w;L;o$eW8IXVo6xV@>hiX|FzJ_WzwF-9WGGqe_$lazwF!c zmllqo6Rr;dirYXn@IJvU0&(EG8)R{394{U~=!2fejSNs0i0`lCnc*09mSF*2zcA) zmV%0t5P>2Lz&w`!W_a6LKip$aH-kpYYrdaG=xDdViZ&dio`jGmBC3^0brN(jT83F? zsfGb{0QqhP7+_TAYq-JqI?@Bm!Lfb&sFUT0oi=X66ao2z3P7W80P=sNPKz24CMfQQ z_Z4mtXhGeP+K#Bs@)sdB*|DU8DnL0PzSG=MFaZCHdw8erxEWpxkg0^SIJXGsjz1+w z&Ob9I7lW@8%9B88ZpLOEw*h~Ve`bIWyl#XM;V8TRd*o;_`JBa6rkk$>4I@Q9(HUQ1@Bph(eOG8 z%01z2joTQ=JwgOVCI8HT4j7OGMRs^=hatR|?T0sDbn?%X<-_YJguWPM%8^1oEaJzJ z{}_1H0)>fC#wZFM4o3pcS%0D;6_Q_AZp~IjOX5rqad0+u1~t5JEPjj2WGTR{mQ;35@Nup9YzDm9-31G?dL0~F^& zR|1Owpa0&IU_b{#-vT{Bpm6v6XE+9hGa@IV^oQ3`NI?Y3+7|5pPlOV_&q{dO2ZdEF zDwV+N0Yt$7erpStf7U1!5eWYTTP;xRr`Q>{V@>Zkfn+&E=LRS>figbE#R=#{8eln8 z=WQQhfq>#=h(f1Z1pG(WAj=`W%RuN0K%FcFAl^tjjN|d~9V7pT>c9xk<37V~hDE|H z0!gD8fkWk=8B`AgqM)b(22{Zi-pIO9G~kf=XUbCGwE>~eLK!ovAs^<9EB~JGsu~KT zpp20xjA%y`ig29lWx<0{2yCGtl^#5c7xi!z$F^WW9r9p zOjfJP;-I)6)DG|S-6Bu~{zwe6j6~>gGQw9_s6hFkBoHqbJu(99*I(3CK-dT0*Z_vvs)^|M=~akC;!ZlJ}9Yz5juEZ_4&~|bJY2_ z!qYf}yaLJ?)xd~c7|@U7MmGb3V4UfD?07*jKj3`-9prk3k;R=c>R1P*L7=p57zi3} z0P;VaG5WamTb#_GI2KXpaEpMCk#@3l+k>|EyJuCy;KK1`~)VV463yl09T?6c75c*_L3#byrxA!?(11!gozZ!ULK8ST3%7WY? z(0G&v9CiMgw>cPql~B~%k8=kM;Uf@xbYtS^^Usv^K#3hj44^E45xfCMcRa%U=fc}O z};qG42(E=1@B)$2oq7?hP`4?~v2RU9Y3U`&Wm0qW3(2ni?; zXMp8!701g@gkk}T8{mDKTLel_=jb2Tf5++R;o5g0^g53aAs>_k;^kt846qEZ;DwI& zxENk{LU9I^8Qdb!>@?s+<)0ZJiwIOfkq^l17Ud|%m^fkiX9l!GNfC_bMp>;nWTZzo z|3&aL0wJ$}GDbBpA_WEr;5WM&5DueK#v}js@en*EL}(d@>Ed;AsncQ%5rUw&RSpq~ zaeT53u=qo<0g8(d1s@P^KtAetd;*RwLN7w^=?U*aX&_#SaKa5h{>|{Z4~nCqtkP`^ z)SqYrEEsS)M4*f*lCWC24ZxTaJSHqG+&S<%4@Ou~Cc_9m1t;P-8P3Ka;!#qFh5Zq_ zVMI6#XvT4_n*mXXK(Rkgr=aElj1`ovlSYe>|B-Z-HW3j5)%w9ulp|>~A{omFJrSU| z4O9c~6Wk&Y2mXkZ9YU97qzwlU`k+7zR8SU(Z`a{F9P@R5ag67G4`J1zc)9S}09k){ z+vS#m;$x1$2=mVjibVvnpr{_+=C~OxxEXXP2M);_Y5rN`Iw&cE5sfGlk3HnWB7VgD zFN3#ciakiTQ{g6!!!Fe8(6B;7)m_meQ;eSc^{m)+ujabGEr757Y zDLChk$N=PjG!4)}aXly(QSb-xeJ6m=W98T~ir%vhD-ikykbf9bfRb0(8$2AdItwo_ z8pm<)Iv>h|;H}*)1=c@DV081(9O#7ssZi7cZ#!TJ?^M^H46qCr;DwL%xCCCC5&BA$ z8HWh@uzp7)|7LjA35BUp#wY<%@C2^MaenEP0oXB}?f+oF04(7nkb4pgh=9}nk;s264(!v08^9YgTF13;v<0cIgDyr{ zn04J2gux#boo)tXBLYG5Aq0w!!M<-E=JdkRC(DsK6`<4~lsp#^0v$>A80+x=ACBNv zV>GtiP#l9Ow7W&XFe(Ni|3@+)6`?Ny^?>XkUbYs-@%WgIEl2R4b*O{qNeeJlpv>wP z0rMzC;E4HW2GqiUASfz^0ktrM_p<8v4LEZCnX)8!EgYH-IM}bP$3Ic1?mCCYz-B1L3N-$P|VArLJp`J)D4QT(eu~Kb3NAIkiK@!tu!ZB zPBdm@&R)Atz}xjAg{$b)Yf))Uf=D4v5QKkd1OeY42~KPKpCI{P!*^#Cfp));Xt}pg2$lr~p(2Y6NwGbg`%h#ep(F1)wTWW9%sqz=3Wt1VConuAAkzq`BFr zf_Eke(P9+4bT}?wG90(k9R>0fYTqDxo*CpOTj_>V&BNQKAOpOvq&aj>fgDUl|B^i? z^tm;*&ZZ@(w8YFA-Y8@CaGVQg_)hyyAC7C64aaG24z;`KZ8>9@{KZ0nn?R$RS6!zK zYakT48QkF3zGE?6S11Q-Tb9x9|AO}^8)Z*Rm0M`y+^qC;^CHj9h-x>lyN7!r^t(l= zdAQLlg(SCeV0Kf`>sFub=4G9m!QE~Kx6pTN+!&DRdBtwVmbn>Q>xL6%(@YEntudPJ z+$aaHEOB$D%FULN;m!$yo4#H*d83!42xWelXbbY`%T4l3ZGSqA zzg-U0X2bp4gth89Fd)s&H0T`sy23WSqBp-3{rvtFnf58@GV& zWAgR0>1C9fV)~>=4%fuc!6JEDa4wWCPhX#%d+Wukue~vIEpLzzO=sRAFVS?+Kkks{ z2NyR@6>d(?UY(JiyJjtH?&WL``Ukythy1Dri_D$!6`Drd*LTXdXyEac#qzm+(R-%~ z|3VACb9=PywPJa#MiW6B?#B44y<7IAB>d6%(}iGo^`1LbNJ^ZFW`cl|g5XK%VB;TF zzrYFu?Y&!`D0V&)DTt{2jx_hkE1hSUQy!Nu@(@xUWoMx6_sDl?{zvDP$oF`qR7MKt zLApXKD6LZH#}au_h?5;ORuJ^4cH#@ zQ<{9*exE#N#jeLAg;OBgiBd*+!|HYGR^NE7>6+D<*%_v^v;jxG{6wVU&FUMKP@1wc zZ@e})3*VfBue7JdrSc?k8K4)sk?G1(dH&Qi2fPWTKiFwerp&yY%vHIW=-W|OL0e1Z zNU<4^MPwI!S1Mn~M+Dx@sbV2{piG`KsXu+1utGILsJX>83Zv#urPnvhe!A6bq)s|e zCP(UpCnJS0+Izq3M`ztHdo7Lv4uJ{@lwpY!JW-~A$Fj6;?W#F9U@)>hKsIpj7-)|1MRtAnIQ)tAqr1L3ZdYp(A>>(ERFpY`MK%tL&I#LK! zgzW?XEg=%?nBV{$+N1)FUhMyeu;DsV{Ua- zU~W~@*A* z)LjK~vITx{_l{EViIo>($up?YVcRwwM>ocB@M4I+If*G`o(jP@EQ^rga z@ymGT~FUWC1*KJbtQe7jV1k+r{%XW7dBMO zmIbU|b}C?N9V2)nj024aO#t0lA1OQlss?QVHGtlx1<%ODCgwA8nArGAq$2%+ZT~a! z49(Pt8OdvJUA}hB4HsvxUX>Z|h(W~jt{8MYH;ty;BhQ*11t$Bj(H4#4VRLCt+?rME zZ^*nccOB8Q=oo|NS=rB14L?`;EvsxKubM+uE~=4djq_=U6wZW-*&vbD*T~m~-2s*v z@Cx|L)^$OLU*6TbOzek=r++C&(VXYxv47Ud4ANrJyy-c4k!BJ-^PGIPzN>Z`IKMt8 z&-=6dqUYrhjgc;UUcMOTtLL7V&-JQ)Em8=F;ue(bB)5yiE%I5~f!FB#E%G#tnbvQS zBe8HjwguCnjJ9o&&kn48JyHl_ZBVl0e2$V?|MTkO0I_rk zMYOF}K3l8>WFh#R#=RiV5ryqo_5mkR{0s6FF&2=muaoG87vyurG(dLUS47*Ha2?=u zz!usMVQtTL3VcysA{yU_6uiNnLRY>hpEWfJko9pbN_M_jV!}kiG5fGm%Sv0*i?X*S zpzKZ6ho?}o^Wzqj%on?D-%IjM8t2%>oJ^#bx5}RSvzyr1eRnHDtsVxvEKizc+@X%X zK$L74#X^dG=5WU`j=BU&e_4*;dcH(|9jaE+k1xx+Emd!+EoUV!x!ieN10L(uSw82$ z&%2dd9GHdoXxnzHZMDJ{I-_2G8vDWT>g6zLZ*!zzM0YksyH&_d9upmRVe zbkl$3rziBkqXvPMEL;8W(98xoaI8;@l4wWY4e~^%J+8GS8zNb>zd=5CUKb9{XuT9? zA-0e>aRM+KzfQaYc(Q`&=56wlSx)}l;F~$QI^gp;{08vf=)!xk0s7xIIbedb-7HKb zHkZ0uDEKw`G%d=jUXwR_J@Q_pz;*;Slx&yKLi*R`rM`)PSAebq-30n4sMvPN>lmJz z1X^v!@Jeb`2e@;4czx!rY)}i?;In1Yv0YSF`T}|ZO)$UTwPS-)M?c!J$>|`k?Q&Q^ zKjhhD%e)~c_g2$7Z0*x?*RRbKg6O>M^2Et8yVTvLQ_T&T>(-@Tn`z3uH77HXHb5jG z%OP@O=C$d$t8dOUtzEPJ#tZ@PCwyVMs&%`nb-TRC&<0^P1E}{^Y>fpYUGfHOSw^?A zB8?t?Lp~kjY!5??q54@po+e0M(3?GZl`>O zzONnIEArYYPp7h-a*!s8Uf3zmM~FO1K3jQ#CPGCoq(PA3>>q4 znG-K@V1d@ZEr06l7b~(K-SCdQLLc#2q;NfLdk1HaDjc%ad#mm1cjRCA)%#QmdQT3u z)a;2AvLSFTh@D8-DjV^+y4bLit+LK?h6B%ZDHD!uy!4)i`9Ir%*DxoaNK>FW>V z`MwR{&V}nyp<32t?U{nh$c~cpNj8PP`DuY&~}3ML1^b zv=iTi7VVgguPi01k)kN_WCA}g6ZLQd5%{Hs@Uh&ZuQ)M8|`VAC+W8Uj;AyB$lm1niCpiM z`<=Q#{tG4BA{5XkpU9U=)qw0A-P}z}K9%njo6(GYQs~`Jv5r-c_?f&&-~N51FpK{E zne0zjeuj$&&mSU%1&}JBJ5Y_4bvwA468icxdAe5vD%tY?K1!ykgeG_3boToXw7f%p zUQ^?R^VCemYjux=LHKHMWesTe%XMh*(!44*SAKko1 zo{5u;=1X~!wrw8;e<|OMGx>90!bybwOZigmN59a#uW(<`KsS6PpFVZj|I}@NK1%jk zmz%!odech$$;D92T*7Y96wt1(NN_JFuTF`d&U$AMtynFkc-OFMN+XL>aXAdwGk6wO#@8`Ddh1 z2f6~sH-fC7e}f(Z)q)y8Z-F{M`#?fJhA1cmbT-HWDhF)={TI{-YD3oFL-{r6Ajk;I z0zi$(+$@v{`y+#eE-3vQKsIOts2KD(Xbb37n$;s)G^zAl53aT92hG2nX|pKoEsYxvv5&NO!T7pi=r3fmczoi3!QbTXwL2*I=i_E z-LOjwR?l=}>m`&!hJDIyU+=@zpS(*OrCbKo|07a>xDbx0vSs`W@HMnyn>?GY|DU`# zG;&OovOX?EISutyNCnnEAr+V{ZeM6=$N%JDU#DC#`0Vtl_Ot6p*@wpU$+D)w7SJbO zpx5>r=(_##OtIe(rCj(vL+OKZ5UoBa8x0QDe;8|$S5Ef&b*9ry(N4){89RX9I4DnX zNOW-TP#1g9g{p;i{2?#QbPCVMn#lHCPP`CURi(O{?S{VsW-GK) z{%2s8Iwx*%;2GcrQTl*fg5k@Zyki)^KO(U|O26%eIt z=Gcqc>HC8g&%yWz^|2&_@=Hn{1p&Nx<5gI+`6|^rLJqqd_0E^}t{i?Fm6;2{2aZ z2fU2avGLf>`YU+(z+k0X+l$&6g6+Vd5$f27nUjXB_d~{MHrrC>g4aVK6O5B^VR-5U zbe2b%6O8Q2xR4cH^dt&x^mf`Y!5AEn^u~d~B-UTtc+a>E8f8gN!UQa$1FVY-3h*{g z(l@_(U@)7uhZwy*s!-|QNEdk%bt}j-#=eHD)$-qP`M*r=9FROCNaU^q9AC zN|a~wfx!rvh$hj=8#G1QJI36nE7c1ouwurb>zxM%eIU-dB(tBP@J76TOGWAwg6*K%NxrHp-;9Tlhw0*_B$EqF%om`&`%A;pA9dJ9w-= zM=mRTj0WF)U=!-thshYxaS^@ZgOK7|V;|!jd=(`68mG*N`ryD|tRki=D1l%ScrhHW z3cMV;(AVfaBM())jV%CK;5lt%C%H~V{NKLDiTV;$IYyJ+7o(|tw>p|Se2s>Hgf;}v zp@y|j#FD^x4nI8ojD|7xwgdEfh|!m#{fs(IKP~VxhT$gBWqwGr@uLHSW_khR*P{zf zqd%hi{EVSmQ#-xvXABPMY(FrV$hyZ^ab|(3iNi_J^OFOEjq1>c8jO1I>d0#%#!xQJ zLZOZMjLw;84Ah2q&@~f{!KX#<8SZ!wTA08KXBzNf$zfjuFgfP{H-Y5?Uicn*W1=y1 zMcU^F2JPUn(d4v<1t1wRx-T5TaExr$UpDvx_|Cz}WUb)!(=31E#92kCiUEs#SXB+G zs=@1I3`aN2;YRRt=q7*UzKHJiH%^}s`;{wWOpyr|o85RZ;3d#re@yHoR5_Aj3_#+V zfg_lb1a%fNC02;H)2sj}NucurFp=YEeE`<&m~ZI80Anb)+X9ReXOwggSG^3&ZaH|) zLB$q@B=9h!1B{abqQ7$tPlrFu&jM5@(cD1eM2(eJ1RAFVw0`f1M4D<4^QjF|J+vVZ zgSH>l&KR<)0aW#ZXTmZ2FrA**-w)8XK;xuY;XSUnGI2Ai;=pru!Q4#-Zy9)MSVSh4 z3sxP4Ofq`=+EIgeC?6(Wp;WDy1XIg@Ixv{bDw4;W*doNL+fdy`8&Hi$4IV=gBK+^b zV47oH;ny7|9V5de+RLP^qzOV4I$44BSE-l_&g9De1A}=?3r3oAovcH(u>Zhd4sBr4 zt$@k&k01>BT6zG*Ec@?{)Nn)41g9IFe6(kd#(>vCd(nw+16RdtOJ(9DPR5em^M^Xs z&69DWNTn6v&8RvsJo&8so08U!yS*MQ! zuafqm_YhCb!NDwb*)=6O7i;v$(pvyAd=DRtne9J@&JQ*Q>f6U09Bd#B1_)V$jk;NR zx`TrW5Jk+C%rIAb(X1ML=jdcS-FS9-cp=#69Z-oX6IjmK#zto}s;g;FuyJCbzy9E0 z5Nqnl0;^6#b&yEorx^Wago_6UTft)=)^joHI>8HPPT&&-ssyi>&YNPK6JYm*e@cZ~ z)rBe_uY-dbt=3U7TbIB67OGENNWpLlSv zmh~7nzC?p@!i=awbqQT)!m4WZKR8&VrSZNv|65H)oo{y_9AfhLu!XM&vc2?x$vEA^ zH2L6Q^cb2QY7E_sm0pZPUnbMR!3vhEiTVt{3i1lUx==uiLyVCgy;Bbk#%PrWR2+is zLf`a*gUkT-VdVh+^nzz%41APXik&-VX$V`OBk0o*tSbX_0NrT~Gihe1aW<|UFAFu! z(VJ!=RzrIm1MZMN6N(9wL_0%`lV%jp9rVpL5^;M2gXrg34$Ilg7{4h}Ny z>|+8|p{krNM9^=Dh&ebYuykd+R-R5&doFNkV2SAi&j_Ab9iKzdHsVfA%tBZ9%yAQV zvEVr)&DzI+he;oXq~)V3A1owI*~YNy3{-cLSGaMaZ}uYe#tonnROQgA;W*{D(GB6o zuvw-v4muZyp?%N*q^#igu#WLzoqFO=3T;ED?A|{*2sAA}sGhO8)i?)ILCYz4s?iU7 ziUm`lr-m|7c*I?KaIjiSk9ZjamBHzW`yY+8Z7NP(hO~o&*-Q_&6*Hqc75o^+$HxRp z1}~p9(_poE<-x&9HG0aD#v)aM>gH7rn}8Xwit*^eX;_^)xhgi7T2R$Vw@x$8xuiYQ zrHHli#1(NrcqSaP4~u;`c)Dwbrf{u>TU1zgai|xrJ2+U3SpY|@GMzEiI7Oceb}EHT zH_kc3c>BS@9MxuJyUH{*pgN=I;L!Pj@mj%40gqp1y1+}Id#7WWiA9weVo;*2OiFTa zS2B&ZO~-&JL3N5+twe@Zn^E0LKeB4m9S7AN9-lN+n`v?cW@ho7nB=s_$2gtRBCw!# z6(i2dq$Mjb_SA(Dn6(-7Tm<%99rwUr@|t0sD6$ZlF)iZg#|TWV9vU|Td$UBEI|HH5 zDjhz4Yaoa{2&(jrIJC3Fi2c)p)m|Lg|z>j^{We5v(Ie2F9Vp(H+*eRz5ybQW*Ca(NC zsE`$H^ukPB0QOT8Lus^crg5U5{b{VVOa(qnZ4R!yA?|w z_T%gWM}!v0#J)m*k2D7QR=sj?Fv`)Mc{+f)26`saIOQ^9gCoOWGb^L)Y0T|>p<4i)Mqdo&TXS_*p_O}H%Iy79UblC9{w)RPNVjcaBV;f69i>reaFzgdu4W0n5^EWBiw#?(7fFlA;LlIbv?OwzrlX5-G z>I;C2f?W0QGd$TO3^)u7#7?as*kxcQaE)aO992c%XbV!tKDF zQltZGg?oY9rkGp0b9BH%YjYp_#M2Uq}U=n3x=H&*b3as;n#sZqg)Di0>^N8H*hM4_W&1h_*-DJ z!L_i>!4_#?sNSLx7K4#k7%F5tEWQ&sgPR3qz^xp91h{SketP7P{~5UUHuZrqw!#MZ zU{>JfJ%$p7uvRz=xOk39(244xz8koCp~E2yM9RUij*o;m`)Gy7SqIT31+gw_fa5s) zGH?cm?Z6crejB)!!)?HA9R3`*tT$AdWfnHg=3ztC&j~C8_MGc7U^#FMhm(MparkoJ zl&iypT*ox41y1AYUj;7Ua3gS!q|6En{M87)*d$eR0#krnI6MQmm&5ac`#F3naB{zE z+TINuG|%NgIdBSx9|z7+Fy_A!VlZkrftP_BIBW;*;PBhPhWRc9ZNO#@e-50@;cnmp z4*vpN#jv6u5f}iYn-lQB&MrE}rN9$7iNk@wRt|>)7bIX%!W|aT^}u$n-U8gm;X8nR z7T|weKpr2BPzpvY80tqOJPe%1;irL%Is5`}O<$N0=a>cifrW*x_G7TGsjGF(s$}3S zuKp_EwuLzVI~A@5Ll=vM!O`KXz$LLJ!RnYcdhG5Z%q|6|0GlSbW=#Na!eUo_C~z`| zBY|@{ya2dnG0y+$Ma3Y7_ z2Trkk5GK?+rp;7rBy%`{IlyHcUJRVN%5^fi6S$tMF9Yu2@FT#&QkQ|%zy=P#2yCfJ zc1@cxlW<3Z6Bq}a#o>v-Rt|>%H*h!-xP`+DfO|N6I|WjEf;q%;776 zt2lfua2tnjVjZ69>hLyTD~Ah#D>-}*a4Ux&n1u0HUO99&626Ck=V`7E`+$=zXx|e}mD02I>b7-T^mr_%Yya4nGTQI?E-$ z6*z{&uLGxWcqec}t9r6w3)AFaY)W1A7GXLVWiEy=7r36oOM&eijtB0#+;y^fh+(e& zNnk^q%fKzb6+2ynoIPt0HB^uDzXV3o5JMyQ0OxWz7&xE95x|L)T+{GY;7YE3BX9?Y z{|(&7VFHehcNoad|Br!Tb~1pU1y1AeR^Va|zYg5U;hn&}9NrCVSni6z9^eQLe+!)L zz!tXl?*pTb6ZiwTjl+8Mr90cz;VC%mPIsMb(tzW*`s;x6IGhVy&f$LoH>eo;VL%ZW zU7Wyuz@7>CqkJ?%1r8hk2xD_bIlFZM7jX4I0Y{(dnl-0~VA^r@D}YnDS%5VUKbd4( zIOu1i@<}l2E<`WNMcfz`yMLjc!}z_nP;s5>+)@nO&DC!P_OT?n6jXu{!{Pq` zr*OCqID^Bl0he&N8MtF#n80psu|e%Q6$=kn9|-J^$0?k*c&-PwBy*#FJs5TlTYxjJ z$D13*svWihM_leQ_)}nEvTK%f0VgE8>VE=G;&4B34u`eVF#f7IhH)A~$YDR=4i1}u za}S0JwK~Y441eJC<2b+@O{8B9Ilv#@#k|>n2_b@@D~UqZ~_Cs*&Ozm zj#=?Uh+uNaUkYsH>eGR%ID9>DGl$m$w{qBG0i)(tyqC=22r+OEC-5n7)Zbhlbpgk5 z_$T0e4)+5Wb66XJ{yA&}Zs)MY4-DOF9)M0)g`bBxSqq=!0jBq8QAkmm%J4?oWpklCvdn7IL+v~ zaOnolcGP41YlL6GDBv0l09SL^1IE^J*b}&Am1_%j4R9M*p99>_;lBgtHn_H6_<5BO zbd}-&TmLn}hhUghhJwEU&fqYft`@R6%%1HnxW=^wi;Kca$km?@+`{1$;4TiY1U6mG z46uM;KsFfB3PZ&=11E9V3Y^d3JAoTHTn60B;YWZCX(rYgJ{qAKIF`dN0_QWV=!ZZ9 z7+sve4q#n61eA|PXa$Z*H>nWvp8{8AyG|~Vvk+pgegSYjhffD?=kN;P0bo@>I=mQ+ z@RcS({b+%cnLLLd1pS}cZ!8s!S6IKgHs5btiwzd z!R0vRBEH|s*`Nd$W!oLD!+S=JCaPb)JjA3|-{ta1Pdsnn8sR$JBJAEpLg3wYgJ$d! z{vO8*w_|m+y-|rhj|z(TWSk|Ogo}k|;8JV1N+)3u7xQV(a{CspvKjbJEEX5xPjGt$ zUrp*X@fp!r#LvWmS@wX=!%@N$aZHa{|1T#YbsArK=@eLklY27wsCBqlxDru{IwE*vz^R;U@r8SDH1?@7os3Ai1X2p_^#!bfm}aKH1J%Y_Hw`1y8+r{Q$rP+aVo z{_msCA))A2J51cTUTp9f?i79+4_aV%@End7-hktTH{nd-x3M~bZx-`m{Oe)hcLAe7 zWH=rNXYh?~&MBFNqq6M|GjOT!e4M;aqwOg93WwaMv%H#5XSc zd26(k4E}kx0xNK+@EV*Xyb)&zZ^6aF+i=(-^5I!E4j~}UWoKbT#t`qS)-6XV$gnMv(Bc060+af!$>tUDjzPJy-@xtHW zv{Z(r(}JTXa_c7I=i^4mJPn7~KIT?;kloY6z2(ljZ1`o#!bS%;XT5CVfC1c|I;s8_!250JOHP7?e=6i ziG+NS;S5|Vd?v0IJ`cAGPsCA=yY$|8aY=`hgs0*>;h8vtPMM|GKYamGNkWy#@CI%b zuER%!cVX93muGi+hs`)r_ZVIJy$%Q{Y72MM5N>T_;mr}Nhn)CLWTM`Ga(KU zy?zBQ5MG1R2af0&cAYqQ1qFIuKI(6rcEM=JzRLeHI{7k}V;?mThhXpisX#CZu_D6= zoFyEI^Mx4Zl`180~xB_=Cb2tcL~Q~*Hd-}SK=7qWSk^C3+D@G;6~y3 z*xex#a!Ckz+U{Tp&f`gFuJX3PS2$6`f5bV$`*DfzAGlWdC~gq$Kbij5B@#}Y%*4_! zv}g63iBpPgh2~(_cKc}d4O}DQbvRUvf?YVLkYE1j?>&H_morg4w3FwDCu9p>QFt6n+M`376q+;g@hoi7l_%trIS`Hwpm>OvNI@5S$_$ zf^&t#alUXAPF`g16PDl#5ii1x!tT{1M1Nu*679#GBEugzWR3;r>_fuvz#- zoHCnl?{+4#bet*Tcj3HXKGsV^Gf%kHh%4zNB10r@6}|xbueKG4!$HDV;%MPyoF+UA z$MAvZ6z>kzkgFKhJ#p6m5E7bt5`0uRZWoTi{?FP9jK>MW@wi0z8eAisg4=~><2@nH zyXSiS-$Ft}solXgy#Y;>*6;{vL^4H@E-rY>+6nWPF z{Ul_I41eIV%k5LD$yakqL_7&6h*2{Gr`~5DQoW2DU$i@X9hXfUO)d1xSG|iH%3K=Er@bXdr;QGt#Vl?F%=Ki%V z9pvSsZoma=UHn_`pM+aTs9fvP;N_#{;_9_74PJbz9+wx}#pq+)u-2u6ytv!N9cx`0 zym+2~<9)ei4De1gW2cb3&ZUFAd{itB)%NV4gvlf%hzvN#>Lc@D}(o&J^+2 zafR@^xK8*(>{`zbJue^iIgY~K{ZoPONJtVH_TgONgSbNYAKWZ_4865O_yp`zpJ>wi57 z6(YkYxafGh7@a(o^}7U9J>Y1jx==bXYXak0C?)$_sN z;n#A+uh}CSjpHt{!{&VLjW&KUP87ZZX9`cl<-#}O8sXcpyHzC2BcbtY`wqwstX{G^ z{1gWZe~n{>f5!2`zv1q+_I<+3rZJI;_|?^!Z{muh_U=01Iwmd=cMl=qh)4**A+OpU zgyT5jD4ZcY9v2J8=Tiz zuV*IQxj3NOTS59ipMW4?kdvT22{%l&1wMnLMZ64W3BQC3gsXAA@H@C! zxB+*0t>=FqwVMRj>$b^Safa|-TrAv)D~12Yt-}5{P~IE1yn(ntI2c!W>{)+&)Cdw< zM21M*b%*_g<3b$#rY-PMoGQE==L$cI%Yz7VVq&(GlLeW zu{#`qbJKc;jY`E$B7Q55-D>k^;i4)#YPRFL?Kb`q&P(9S!IbCatG*y%&)YV`54c_U zR~%4lvHx_3*1dYnb_cdTrd0xZWMk3#}?U- zZvBk+i1=^Vf19oFU%0+}gy(Bb^aF~7R8HwOvHo96Laf*z6{iW`iZg_>a8v$pRdK9$ zm~O}UBK{Gs7ybgb3jctE-0#>L{z^iq@c(eU@V_`q_}Ckn2ZRUX2H~N2k8l|779NA$ zk?-0Hj3Xgi_%d89d^N5Yo{p=zB+F6W7O22oBEA{B>TLP7I8J!yjr6~Ck_PpKh-~t@+GQSLWjJHCM;xrLojvIxao#kfcyL-4Qan4}}8C<(; zfq!Zz+QmfO#N1tPr(qXU|<@1Q#oF+U27YnE3R^hww5#byh*R^4o|>of7|yBr{fF}zZu6zjqvKv|D zYNe;nQ*PlLeq=AfX5;+NZ3QxM-4r`&?#1PeHtxn%Ub~epwSa^sk>M#E@Uh*X6o&}E zh~tE-aQ;4f3Fe>9({T|Wh;xO5ahb<@|5RWE2^AtkB+lP5QnmVfkN9ESDB^{~soI|XQ-NdVP-Btd1YGloEierii1;12UN{@K3NOOJpV|r( z;0WQTa02%3p9++ckS#L2h--zbaJ%qZST)%l)Z-}OPjI$y3vLzu2_I<^>wgCck)PQD z|HK9F+hKG0t=!#;_*7gaJQFtw&%s^7cjJ)Vw*32X!fv-sc!UI(58qhe^zx5zt=QlT zoOIBB!ZG|dmTS@Lqi~V%c-(Oh2jG;q6#KW@{jI=h?rC6T#<8jRO_M=-%af67jzyU4x0M=la@W$Ke z|0yD23mGzmx8VZe4{){cXLyhBw>a=?yTe~_sPF+CD}2~ZLY7GIyMu8rd^~OuJ_QGS zV|Oqdr*RRQrMwf>d>kXT3CbW;YS`J}4P4e{3#`Lx`e^=7zkJm$T>8DsBRzFD z<8tBealLRm?iN0T1Aj2vv;H3;A*v_ANA=63)174RRA%6K5l_dd!gt|3;T&8b{4h?d zvCocMaH)yw_5UXl>P!Oez&U$|tCs%Wb2@P@x6dMeIqnvoibM98Bl1x*aj5Vd?LvNJ z^#pHuZ{Rp5?$%9MM?$XHU>7bHZpK~0-(&wD?GD>2vk%*7RIYaopTX%r>oaB-aCwl!7Tq#_HU7Pvc z+kxKvKjQ8Vm#4bA!uxUAjM0vL)gL%wpN${IQNsP1Fp{w6_;mp%l8`Sl48tYDqj0V8 zxj6m{d&#vJH;MQ%+%CKd2e#V^t;a#_V*P(bXV^Zn=et_`=5YjKgX3|c@F}?Vke&N8 zaGHqE$N9p!xI%adu4;GN8WoYy#%Ht5=YW62^cj<%0@16l$6b7@g}GqZfJ;Pt z6ZZej9>CjJ-DcO4z-;=|pEiCnj+-@_O#0=kT-o&h%mXeD^(Z)#3^~GMafxs&t{0w+ zTZEJF5#bp)y3vl3SFx+p?yts8LX1dw52p$@;&kCJan`qXaf-Z$#YV(0z?H&rIJ=&w zUQP=y$4w&cewKtm2W^dBz|q35;aK6VxTu9+eRm2x?q05#L_7#r3ZIUfg(Gm_p`QJ@ z)mRcjY=Vl#vBHyahHw%t7oLHegwt`m@Lkyde?2=?IXI!mtp5*_P}Y;+qY81I@H4nw zxC}S@*c+3BIHJq$;2)eSe9V2U4Zu{MT?yUcnB-D!y-oQ0W?Ctll56}lhd@v6D+g5lejuH;TF~VbTaE^UP zB@d_SxOe^aQIC^QA~q<-Rl?8X4&e%XM0hg}`NvkM7AFYr#CgI^xDtE!&nftZgnE&o z4YvvZjw6oP9dzR?Vc!Rt7lZ?Go$$#x_Zz#m+=kV^V*Q^-LiE3O2M^+8;l(&dco{Ae zUWFTl*W>g-p?aF=18ap(!=1vRIOZ6;!*g(oaEzOT0+Dbj?wW7^8vbcqBjV5DHsKA} zzn|T~CLAIBHck@Wfpdl3pOR3`cVU=Oa7rF?y~r>e=kMUd=gv8vkK;tI&&8F(OK{3; zF2S5r_!Vv)Y%BO9cHQ1HO5AEc36aOy3|%-`_+OkYeC$JXLgB%ND;Q=`A_7Oc7xv99x z#P#}rD+vLC!>P7@`KT-$Df|GA7S6|Q*V+QVz=b0I1KuP2D-Jo{mj6GT<(RYYqy8l! zPh>du5oR{w!MIU)C=MEE3k<_?!eelX@Hku`d>O9un*CFOt4Z)b!4^0jhYH_}bA<2I zas70ht@Yeqiz`KZC+-w(!h;6c^1s2+9_#&6KpP2ZBE#>vP`DeH{4$asck=EqE}vm4 z;#cB;HN#br6Mq)xieCQ$ZWn$H=glQQ{m*j*YB8NCh>zj+_xdW_G}PAkI$W38Gi=mN zIPN4Hza1wEFTk0?3vs#dqqqipj$gOHauQlahG%hGr0wMgusYf9@GuS*_FKYbyYTTi zUicIomtil#=HiT#hdcYH0{4+nC^mQqmtJNsnReqU5pTuK!h3PIa3@x$*b4uR1Mjru zUG*q^=oGija2*M0VuPD-j_~ccT6h7j7hZ_lgdfF&f^GTBaf0x(INL1}ULc`R_%&Q9 zycKr}zmH>1wLAD2rwD(A3xt2fYO}or8(YBo-ykx?l5j+LG7dS-?jQ-r3D3Y8!s)nJ z_%572B(&!{BHzFPqEpuu(EsuR?IqaY$C#N!hM~AsI2;EIwr{E2hhsx+1s}p``rAi5 zFJHA3r=D)(D{#8-n#bsW`66K>8ES;L;6~wXxKsE8oOasCo6|&J%tGCl-wG{CJR_3ID^zA|9}m0}>vBTZP>r zB(#Zya9kP3gT{W|3fza4%O24~I8JyeP7z*#i-gzUGU1K5&f2ZEkkDZh)HWPE-0tuL z954JCP8I$ZXAA#=D})c=PT|9N&i}wgG!5zXyIC!K}0logOCL!Y(`%ULR;arn}cn6NSl0QUp`ozR1IENyBIZhCx zU@9(8;4PT`-UC>N1Hy;*{ME~EIQ49A1?c}i>Ms&h_Gr(b@oe%WGaVavUwlI%t`iQz zdxTHN!J};c2plOq7AFbE;+zD}+T#8D{~{8yMTXV5P`Dgd3BQVKglll(4*TqQ;4)fB z#DlSluoWDEJJa>;J;$%l@d6S;MTUhqLHJReDZCtK3qOnN)9m8XflEaEPuwi5is%#C z-t~_rCL!WXTf-n6BYZke5stw5!eenD-yoz!tprpEV2GyLqZe@ z=A5VCY~k6sK{yk)3*U=_N89c5aNA#YvH1+Ai1@d-V6<5Oe<7hlWH^8ug%9H{VZW!8 zaz)x59*^sM?P7BsE*9~da5cj^)5qIFRrpAx+ZON^2^r3?(4(Rr$LHC_=A@^YI4-dH z&%kB(*->*Q?iyp`=iwv56LCnCjbDy)+#+Er35CKlah32K+&*Zes(0prt+-yq-^Z=O zA7gc{-Qia_K=?=O&U|sC%5w_5kn8CXk>L^?CwvtibmjrLRZ=yak@Lf^#S`oPpI?djx0VVBzy{lJG>FCVV;06P}7Ig=el{{I!UL zIb`rZ&+hPU93p%_juw6dX9z!mtAtnLCgHVMMceXU4ke+RPq}y={m|)-;3$!y-!shB zD_0c-j&awCw5RSn$zuEU2^KjDnc0Z5fyk|$KLT6R~7FUV*FE~W>?E^S_+;ElX zoS3+k>SQ(h5%14z>o2vxb0ziCUU}p4zzObT{z+C2z*k*b!qml&-41d*7yCct{cU$0 zFTus+KhBB2kDtdw9RH3Z@Uf0hUBwrR<3Pvpc#MeOy^3CRDG7s}46Dfy#SV{myaP|f zCf=iWIK*A5)O-?56Hdm3qK5Nut|+h+2Z#!N zfaCZH1MkaM?ZyR9jBv~+6mh3;J5GMm#@+uTp-3eBhg*dEKS%#sW;Y1JslsRAQsJ|3 ztMK`H`y#u2oZjBrt*#=W*e0m!akKEvIB2;oAQR_vicB9^iJ!nHIH%-2T#ADn|AwpZ zK*zz)EAxE%8J5NgID=6!(ups?Rl?8XA91J?f9+ylb!3f8l`sx{eSOr| zm;0)OaF>eL*VXuNg0G4`B~&GPt|Cde3uZqWM5xPg{myb%s4bOA0 z=IhPhinAl!HbWZ;N1hE;jZTK_^~{W-fLz@9TByo&;(_IiV-XL+c^}&C%W<8ESK{p5 zp*=qu5&Ht2-Yqi3laRgL7SN2lMZ6VfEwdHKe34;wW~lc7Il^q5RBYq^8W{C{V;N!o?M~fKPC`h<}A$KZdGmKW`J?wvm}q#ItbbcQ&qG zV*D414E$nY7i z<@?1=C%gGIrQ$^V4jl2KjsK04Mcl87PPf&@pT-#?UW(%v^QY0y0k|VKae*N+oR6y? z4OPufh8?&>#6Q7RheLbbIh?hb3v&^_4HrCaO?>mupYKL0lx_f8&T% zHvaflPJxI&jdNeI6&U#zr$EFbaoIcG?LD6&sU@LRWZ0p7z!q@b+l&GcpM~Ss?iTUKanxEHKka?40Y!Wy zj{M5Tx8Q)Y?J26ot#^kiw>iSZdalz&hU;)%4!=g}=dIu`I9kMi#|01B7Fx7}BNp*T zan;v0e#%a+`$gP^OBV1hyE#WyBxH#UTXE}h+k{tqz_1bVYjOJw8~+KHi1>aSS!?4D zHZV#=JRhgtNGCBZ5cDC#L}VC-Yd*2@S8%h4zkx%K*e0I5iwcSO6r8%*#(%&^h$kv< zi;nt;8yEMJqq#r#UKURy;jsdHr@jccudtWhFX4o9LOnl?t2^x>ob}jfb*8iZutt_+ z5ubyPr@S+qcoEJcZYt1%-FJu#ejn2bMFCgg&xK4tl6HPngk$I)YK z1<(707AhL8PIclp;Up2?@CobxPBNGRJ|{z_$T0L%rB*!Zxl!PFebppfAmUHp(?tch z;&S5V2z{EAI!gQ$rvhi=PO<$xO^pA*D7(QnGTcjrPIET+6{m>!xu0?8B97=ryo?I= zbMilm8^kHwg3H-Hgt$Is|KQE!Ki$b6?%qwOTRa--m#>P#9cOmRBltb? z4{`Fpin~SrZ*WIXe%Ak=NoW>382ANK8VaEJ}Y;!Lvv`D3x~`=}=UMzMn3FnLaQ}AQtKhdes1Gq)xe-W39{8hM=`~$ql@2kEgp^Hna zAT}6`H;5yM#oZ!*25uAi=i@iXALLZ%IUMk`?bIJ)|7g~K;+`y@ldwx{@E;Bq8=Unm zb2%G$Up(`{-;@7%&(^-`CLAI1FU9d9{|daH`~#f)bvWi}bN|mw)Bb`bIty;$T=!1W^kwfG46O$#l=IU>J%BMEI{gDv>PLOV{s#|2`8 z<9_B8Txd^05I&v!W*)d0mx%m#;!u(Q9z2@-PN#LNG7>7p28}pgZ15$X$OfiKecI^d zBLCSqUF5$IPb2?G<-J0hjT=P%CvkpHe%AjI67CfnypLPN1_y9?&jvg^#_b{=_6toe z;$!eC$_sTWFavjs{7Z0~$*+i|!tFFZnBL5;B@8qZd^Cb=>e8mRl5^D>N5gYt~)5Q*c#lMIh1nr}ji~Mmo zU*x|M|4x2$3h%)w-u&L@|7%Go7aP2c{hzSC_Dh^0cHrAilZ*U;cqsYJ4lcwwBL6M8 zP2``8&n5p5z5eOT=n@hN#0K@)f1GXdPw-`)4ZQge;}VfS>{m{K$Ug>ONB&^v6wJUC zBL5N`r}MLaPnIGQ=86s8#x-JteK?y9LddOeB*y$7mss4o4fkx#FOlIQ;^xk09sWgB z_!HbJwm*5lQeQ9QTcl2P3b>SnZc)JF_(?LD_#1d8w^IF_{6FFN@wP%|b?_DpcSb{< z`1LqV#Gl8va~ZA=K)3iVoI9TTe{)1bepBiku7b@GO~fUlfW>$nM`WhrO}JXb598mt zwK~JuLFn(iKR`SY>lVwzi`m|E@|8Gb0{8!>0zZ(jUfe7WIKU|2ryxxM)9_yuU=|NI z&L?iR{{UYnZdMQCG7%rw$te;oGzZtZMTS>Mm_?JDPV+Tx5%J*%`ACJh+r1ihiTDaU zfE}1qwjB?OwH54tNU5vD?S3?NM~V!&Bzz`XpaLg|cqg7LDj4!V<^|%Wh0<}m*uDr? ziS1kP@!}NwbaZYyOz>91Rhjc6Ts)$d-5hA`AkL3W&u-k;=iJMb$7{A8>40b9Ic9>2m zws+4Z;d3$!aWbsJl_JBBc#1e@fq%1{ig+?^6E4L!iz9Bp>SB99gZ|-(i9H~gM;b42_loGRjn@LQtSpZ*_<4{=k0Tk!_AKh>$gQ@Gy5_4@Y>3G>Co z;eV8Idx@<;BCZn! z#12mLp#Tw&$BiOhi0>6GRD;_^T=9PI%c262*#A<`=Lfvc|FcL4@FsZrz&0F+T~tW- ziIe<%R3t9)^?Eh#|IBD2-o<1m4iGMUj`#O@=d|G%@>AAR&-2Tnj(yZUI=<3AW?O?hMSKH}AbuiS=+$mF&hxR` ze~S}|4`lzI4E>JbyEJ@lh7)im8BTNJ<8g(EUxrJFn_+twj`6eG--jE8^Kh!ajX#E4 z+1_mms3xI9WY~sPiM<4C$GOMY0uJH`;^qiL`q3i&Y&;Anig*$(74aKzRtfk2Cpbr# zPeSCewty#aktm=B*NXUdTut2EId$N~0K5GkxJATW$8y9XekMLr!u|g#P6d)l$nI|o zxDki0vUj%yxT4f{x-IxG`p7ZP_TS+Y^7}as;KL)y7lie6+9&W+Y;UfhYH+!GwY}B) znS>B*RrNHIA@#!Gwi0}N^B~$2-lF`tfo70x+wo3ju>OhbB`Ou5mSJ< zT~5bGI3=dQCvi3#m;%4ViDHL7gLxn=9Esb=uMbF1-PyREQ)pJdHCRRUl*hM7lh7n~ zICu!F6E^Gh1Y9NJb8wa|K)r&aX>!vCTJRp?X7zKOh}qtB>ML;)_P$vEl1a!oSB!fc z%+zRF;89#4;zc-C#NWmhB3_SEMf?D65bjm zBEA%dig+<@6!CX)yoi5@JDoWF-&b{!kS;R(hl80qO$(fP67P_U_<1;1#Ao4h5zoMB zBK|b47xCwCo;U8j|8F3nO=Q@O%S8eIV*m4O3mkhgO)BDJaj1yL;tmnN4abT2JRC%) z9AxhQOG!u*8D7Luo($gQ`7>NZyu|6%r=G&%BI5D5R`_n5i%qXzjmt!Q2abqll<4(e z50m4A8Mlm6Gm*sLcrp|@@jTotCYG0R0XFl-mpV>^Bz7=PR3M|KQ*d5Fc zbRVcCAys79hpQ<-UlZyIPCkucg#8_Vira)khSG_J@4y|x@8eG4F(G{N=KL_XaybP) zNN$Hv+i;0E;vKj}_+y;Gxb+e@fhF5x;IdnO(}^Z6o96aE#K3IFd>KIc0= zOr<#2^)JQqv0M?4n&hkEgcsl{;p-Eb|C`e(fL@_H(PN3cr7kiw;-pz&-mkGDzKzfQ z=8F8CI7;L{kIw~IfG68T5+IpNT2ZGQLld@#69RNygOm~1PM z$mfDX#Sy!4mMHK&oHET8cqyM7E}+6`&H>$nD`$jxza)|aT9M|f+KH!n<8IYJLhy|? z!@syDEzCPFu)&y{8Rv7tlzteiPtk1LLfo9P6*!5w=YoTH18x!(95CBg#irN_F2!B6 zP==>G*1va1Xt<7vhtc8b19x&tt_<^h$+Gr!bNQ(B70%p`SKZay-`(BY!{_z(ocX=I zae=U#0)OKpP;v+7-rL*v+}GPrJlMN}&3qa)kF1qM7pFP$8wYMl*^dy)!Zp1yfnXgT-c$xJNO&eR)P z%&_G1{CaKBAJx7M?_gr`T*l*7d!;*ME&-zb> zxL17D6cRi)8u(#+B{mhP$NmeQzw061?^R!Q198u-8cx8Cxi{ZIdv~%|xAg90hd9}?lZ|_Wzi^<_G4pzwboHC`A>pnXc93Y}$#2o8 zgtxrys|F>q{+j}ZY-1h}88YATRW9LA-u309)3(6q?aYkA#qas57~#Y3`>HtM>vwRP zgg5PE-biHq*S%Jcf=wULtI1$|Y6C}%&BU?OV>dJw&MI{sDo#zrbc{#j0eWjIMxxa{NJUi(RJ zmw(#Z8=HKUTNd!@XT392@9yolKJV@A&At8M7rov5WpD5Ks<$s~;q$k0=3DZ0?@qYu zo8BJS+S}KD*W1s0-`n5((A%f~*xR#zVycuC*zj|2ceM5Pd3$^NfqlKbqrJBW{a^1< zbU9Z*=A|!E=etShE*q^P^f^_m-PpC(=_L3A93^}RC*kv*{KL-RK0w41aGdZ0oIv@W zPDgpq;TLd}v%UKR5?VxtgScIIsLMzFk4|^3v%&QJbkc`ME0;FCx&&vk{MInF=~1z* zgVmJ$rq}<6J4}VhANL!bnDVdoZtqqPkx)X0sZN2D*r9ppCMvIFZMY{)wUVfJ@ILuN z@3xE83BNNhWQD0ZCq5mw<0i-DxMp6MYH@rJ7tJ?uw~xB$0CVvIyMv`THrsBH)u%$w z;;Q??JWZ(YjP~Qkbg&=l_?Gps1mF43~)`@o?uHuf!=>j}2Yn_i!d2;P^LOg3VK~;0W$^ zv3US-8Qz1lp23|o@8qG6(GaD44l)@$NsB3X=s z8P_IWgJu5d`folL*&CC`u?w5+YjH=ey%G7}Y+rsw@!FLo+) z!{Z#myA1%US<{4&`H~%Ql3&=mw z*}fWohRtRCpKcQNkl-1|Y%q>DPmYKTxp)9aZO1GuTjtbg4k zwDu%0SB>V$q;Mb}Br13^ju3X?7~!*Uyl^y56}|{(80+;ffrLDhfUm^`!l}4O_*PsZ zdI|%CMrv|O$ z63dx*ZVvEMH6>vx-*I$*Kh?y{XnOsG<0v1SVZ0E#JT0Qve?6>7$P!KDGk{^WnkO7i zfvv~;sm^Duw-00#JQwEu#UUzKegYL-W2e@IgE#=;TL$~7WNc>I9XLf>umAc8BZv5@ zRFR<=r(rYI`kd&eadFhGfSzKl+%*67W?xfr8L#wCOu{O}j(w!DQaXpJqJ*%s8K*<%X zB|F?;F5=Pwjb^QQ*Ws3Gq{Trb4vP z;$eQONcaPsLIq79IOB9buK(V%JG_;Ia%|3V*co_dnCf(D{64OtK-~_y(;nmUQ$fUw zoCEhJ6BDp&NGv~bg8~T7VuWaO$W_}jtS^e~=JN%K`SLKk<;xu8TexzcK zkPOw#19=aPRxYQ>|HQ=& ziEBmvA8@BF&#gvW!?8?3{X2kZ{Mz`6ft zi`zPE{2)&5DWCN}bh@u{i6gj8`**v;r&73x$Wh}uJh~X|9cm6C-a?syq@?d7ok6dsb;6Z0n50kB<^y0`Lg9S zA@MRN{u__i3u#jG@H%RRzR|Gv0SoXm#62JNqR+g6)3AQl?A8-WHwkl{1nu$9P(x9` zLi~Uzpp6@g2<+)p;53LYeTDXZfiL;g?1;lX}ehtIz2P zXLA7|GGv~^YA3vV3|Gm*(dTl3fzzB*uph^A#Aa^)bu4Rz@YM5IO|e-R%A6PxwB9+!yx$DZ$}0?fGQlw66Uh?{xi2|P}?30GjZS&vV= zp!X4+d|_{&8q?cnjO*?2@x6V{gx($(+uM^SdTiJKr~1rf+wfkF$n%Z`GuJ-ciaos? z503It!(X#ATP!Z9vWrVSE)$+|E)O`c=gx`kAHbJYxoyG=BwR}d^BArP-+(=D$*{pc z_*QKGfFOJxc`Pa?i66`QnOwMw}bO8Or+9?lN# zyx31g&i}=M?_^D8Oz3Jue<7_%{jML#%;oHI9)%{7K@Th4 zOY?BD*x<7(c%U#b-1}?sjEcQi@*wgOMhW@#Fblql_xCRi_kQ>cUxjnAxguJG<1Y($ zK61f3tvJ(LzIXlaA|XG{P9(9@sIe&EZk%+njlX&e*NhPy0dupizz`;$y5MkCLS_~%lZjU%pgj&N@Y z1#$|^sEFVSs2h8pX47JK;2_arZ}I_z^pnC>s@LJ{p z63jR*p2n~e{tZXd0%qLKNahMi?C?2UhD`k`OHl z*pG9u8Mo(L@23_E&%<5V4BKif51?s!Z;wsseL$y1dxoJte(#@P#FJ1-CrQ`mkY2qM zAEAa}#Pyxa>o{$Tb3}L#F2rWk3^<>g&1&ll@NnX06s6(vbk+u%SeO3`j@iQcZ`S)0 zF7Qzovw^ul7>6S%kUrz7KsrtmJ6wh%gty`}QGqsm4)(MlrJQh~kGc>KaLOBxD4T^BWE#W;M!Tb$p3n#{Kg@ZkPhAKXa%Z2N4g>cX~p0rZoMNS1~l(GKTr`b;R z+FFLi4eZeAwShb$>ApF<=K;gGmuYtLM^S(tc5nT`1q(ZHISx9)y&(Au9M=c(m~Im0 z9O(S%JfJ9;ZMXkwxSv~9Qb4z}!GasOs=YE?C36n+28FYDL~>)eYIDZ*yqkDBJ}X=` zI4({jKRYxPD!rM@bm39yi~@F;<&=LhEnr^yZuyRJ-2YW&*iN^J3~8_1bJmJ)$L5?J zJDztnu(=2wi`ARp!#jDk%#iTuW`xIy^XSQa;7_gE6LNid7cjkrQ&D8P|#*aElUVC=b7 zqXOUK01@v$ktgb6`)J%Qd=qZ5cB{up@Lv?J;`BM97w^UmqQHM~nQ+8K6oAb;nbUBm zh%ds`l;^nyq`aND4o5oWkGz=G7JEkx=YJLnojnOY>N(sc+=07=C&n=`30LB>hqwrJ zb}--)p6`naU4Ub;xsSLRUx7WRRImSqBqWIq-o$Ap1M#15(8DYy&JHfUl=WZapNq4I z>q{=(f*<1o5%0z=#N(X!4VUr$fm1%m&(cdm@FO-uJFX&w>9r@u(`iJ37vU^AotfD( z@cr1c_)y+cxEJ5^6tXbf`v^tnXJV25@kSoQ-4V`T%z3x}mU$qaQ)cFY z?=$G`Zhc?itpD4nv3co7tp7C9sL8wsBsRDfFBV>iyRm8FV=m`e?pEs}{5Wy5c)g8R3Gc-f*c`y% z1RwPpcAH)qOF}IP=7?{@yRezbMsvxP|73X2TP$01Xxk^Ohm`TSeWhIsu368UPG#XL z*E#1Gyud@O(r{JitSztew7qF%xVz_G?Ozh=DZn#sIj3i{xEv7$Ui~k(Px;|0h(pkQ z;w0W`ZFwr(`vX4slB4tqn$%n&E#}c{>S}xM_YgNKdzMl`r$Vc_Ajw}&CrEY@M$X|8 zN|CMc%v-r}SjXz+#Gkp1838Km3vbcA{8O{-G#f_`%`oDCZpYo?gVw@fL&u52JP)|JizF`uMqC)09p{G`! ze=zV2_d2?gdFjDbk2}iE49w5?T)_m4%XP7gh3UAEzHJ7}!#D$*>828Ai}+VKAM@^{ zXS(sdlCF%IOtjtVY!dc}4N`Dn1zkl?4`g{0M-cbEeARYbL)`mf9NT0EM#xk}iFQ$)NIUo7H7 z6KNq6=N3zak}!=7W;9R1MJ5CB6kI8MGoC|!bKO&j8$^5s&LVDRi#psU;=Ax7C+=Bd z{vbiUWRLhLE+m5uOp+#G`QuaWg&LgkwbfcKm|az8EKq`15!Zajp{d@$(UI z60$^w&+!LjFirj+E)?;AYkbs~#LacidAO8wKFq1`EL@LG3p|E*W7A^Q*!x=feOKVg z?#~$;6_jtLx1kGou7X`;(zC}cxEV(|ei{3}Y~z36cHHX3r)2XS2G=|8?%ALBcIvb# zX8#_$kH+>+IGWPOIk@!|Xa1zg>hO@aO(*tM`*FmpcGQkZ;;MwWX`mT60-HX*7$+u1 zdS)Zm`D0Ww2~AZ@;JU`_;Owbf_|@7CQgDj!BeXj*wIGFOI@-y27~h0d8R_P+L!T zUsECT((~H)#M?N)LK1cUi4QVAZ{o2D**wo#-q#5nf#*Yc6!0@{G)IiXa{bg}IF17J z4i5L(!Kv5w-r=Y|J|B0yX$RRQxXWvOox!hllF-Ty^a`Py^vC;oTF5!d@$9glTG*$+ z=Wtz((+Sz)0PbXaPYbgBsnhsq%QkxoFTxDR4Cv-XmHpj~1(?f@aCPL@(yfOP`Wi#w#aw2d;GIUDrGOTpz#H$6xhv zS04|)zIS=ieLNF)QvCtm>bup~)VFP$t?v~J8P(Waw1h2U)Gu-xlpc_QkC^trFXQ-k zZ2Wf|h%eAPAbzg9clk?tRfvb3uk=bdc(l2X|LNlq(|aG`6@8r9$IJS7v$UHt@`X&m z-F-YXrS}dm>f@XHIKPiK^zkm?l}&#K#-BU$hTeO~>EjiBym{rMf4GY2=#zZ>jNZkZ z*~gRm_~t%d*vG5-`1Rg)AN{O%!qMOQxc|)F6$vi&U%@ExA*Z6ef)19552K>g~s*q^gdpOTiyv*d5kWu z;`kjI5-Q&9xw2ILv$#rO`01CP-p+CCTzRS#obqnCN+YhfUx)qQv)g}+Ylv4n@l$T% zGK%udUEZZQv(9q?t{)U|g+fA%sKA@}2pP(p0({b#aO&)Y9EnS}+xWdWjtZDXdM!?P z&&K!Ti0w9h^3B}I6ED&ql-CtVBOy&xU@6XdpC|851-`(Y#9dgoh?>pcuhiQeT!~x7 z4(`ECBK|He69@2rIBN&nn;YfmTR0~Tc1d~?Cy4^L;z2v@4*k+OVo~5ZxQcj@Q{fz3 zC=O`7&i{ek{x@7s`Q8WR98vHbmMAimI0ekcg`!EHz&TVf&53`7%Q&Z|Px#!*m8#Qc zbej&q(I47HI|wHU55t)sa--~h`KWLb3Pgr6xLh~}*9l*OTZFH~UBbzD&@NknSvXQS z11Id_M%h$gJ_+d}LoUt}UV=-7i*SwbYTP7Tjyr^3#TB$rC_B`Bs0BB=Nia`Sd~fqn zpJ8+9c{V5d=48F;wkS8*{m+kcI#uwI4r4*j_SZp7wpX$*FMFE*G# z!U3$O6TQJ=Jcv#SyMIPreBa|*F}hIuZo!sj^gRQx?Q6@2t|{YDkN z(ENGFW-<)L<~j6tI0m2M6cBI+!xWnfvGZ^NHh&H>3s>V&PX5Pm2R0K=H4daxo3EMq z;SRTtI)en$gvZ^<5n;2#^YLxiv_Q!tJQ`r)Ftl^!2_KLfCJ4fs=8%GPT!7gmh=`K7-#Q(rb*pFkvgLGVvT{M{<70YlNHb?vxF2-h9{eoY_=DE(G1w4}!`6u8yta}dqpF6sI zK1;wk(L2yLST`-<>KPX}eg`*lO4=Rof0Va_Wc~u)BsDF>)$&?gg*{Uqf_I-lO^`Gq>-xatB*Ez|H*LHGrUdQX$!ay%L4cJ+2KI_G}L+N z7CX0(lW|qZDDNrc0L!ueFg-2l7jptGspo*b>mP3elhDov-WPvwieq-z=Q#Ut6*j|k z@I7=QtlLa?$_cnb#OL56!pm^TPP_e99EshYPC@}~Bbxap7S;wHN~FN4jrdF z@5@*HfrH#4!@ne$m+n-q92S!gY?EGvAID~K`ixH6m^Ml!I>U0uN{;xZQL2by^bsGW ziHnK5C{%kAM_i4~;Y012j>Cox7*tz^qX{pS*t!XV2pZses-{Y_9(&$uV2dYluE@XjLFWHPk7~RM5P1pSX$&WtEKLYeBvFXY`3L)c(+(f(^J}l|AQO zxEy=-r`NwL7I9fj0@sqBbGi`^de)xfV>v}FrA{xVoo>e6Sa&+z2e#vgkL(Vk^0-PC zUXL@WP!#!flYfFEc9~Ae{qJECg2|v?Iz#9~bUHGaPBjJR_H4i>Y;hFUTj=~R;8c;n z31C^C)*i6lfa0=EJEHs|4+DO6?u|YHLPX$b;Jc>iGxhx+@A1LD##pqM! zOXZm2tUpdtY2$;S|oX_r+gk;6@SOinHDsrRdun9tVdb8qGQ9ll_ZXj6T+2)~ZQ#%S;u}k>20{+~P{N|$cDcpg3z9@Ga2|+ZGxi#8{+i;w7 z#6uqAeGfJ;op2(aDV%}tz@`&Ejpt$03E#nsu<3-q;=)h(LwR%A{5;oWf#w|1CthB~ zGvS@A?@lKhxzqB^;C{~bL67$yRTtuzPwmY55Oz0rI!#8u{+5KwCOb^}E#(qSI0`pVKps2L!|DO- zzuV@2!O2h9GfF=7*ycaAkUsXg%^zRL{NK=IGdxL#PO-zSIN>uJ_j`h=SnTi|+$`cb zxac#xgY`Ihx843XoGmI4{3P>Vv&b;}NhXdjZ2?c>#i?@yzTfiI~|Aj5!HC!il@GY(v@v!Aw0f`n! z!tr0)?N{S`(Sq(BB-E3^RN#cCcz_@(Fad{tWeZr0)0%AsH{o&-|3_OK;i#wCzQt}o z4>#Hhx>YF&Vqr`ZD35?n6gO*sAwTfrlG`)};_lUJ~o^pwx~ zKc9qhk)alsiX&{tq2Jm9#y-R6FhmpHh^s_=0}d72e~zPC?e@b~GIg6%sMr51NT?!% zIR#JS|EKIsz^o{)zJGxMQR!jWcLW?@WT-R=gIZBS5DR8&-SxU0CM!2}h(nBeOY zzq}+88zYI}9#=G|s6vdphO3Uf;(=F^DhBgVwI@<{|*x7 zQ$UU23-I^^i+kL{i8fI|5o{$Immtrqb-`ST=)CV^Ko#nJiyG7{!~ z6j$&(c$$(@gmfpk;^R1f_+rfPgpifMa})VXz^xOjU?aFq0z$+8^%fS_iIo<}Y|15sqxQk_$c>WCV%0&L%;PR-%2se;W|9Q-T-gmP* zCiK7rfyq}RxBuNp}=Ge64k&ia3Rrw z-uDO#Cbs))z=Lu(K7ogU3kf_HJSTxC-cx2BClXGiz_J8B1H2)D&jjyC;2GdH zU&bA{1YDEAzXI1M@c#o(OJKiD!t6xCV(@|lz8AbSfgb^{OW>!$pC<52;MQNo9eNF1 zoxtycMl65K@ZAag9C&2{uK{mXSnPjqlCW1LfVY6VexrKGm-xU|0)Gvj zl)yiN&rRU{@5AMiz#YK1CvY$D3Wg1J0v`*Wn82ri zrzdb8JU4;Q11}13xc~ivgyo3>SAyS4;9rAxCGhXTRlDO3-2xt*z<&mhPvF0R3km#J z@SFgP_F?&pBuqllsMGIG@VQ`hdhK~XBLFME-4WmgU=_J~5qK$BIUfHA-UwEAM61BN z!Rn&(D{xN~Ut6{R_kMsm770OjunEBv!K#6o;OU9{TflR`>Nx!}cmY_QroRR+1*;DA zc@RYg9xCfU3fzXxsVtZ%JQ_bIVFU^4Ds?e<8d&vsHTZh)5Ly0P@Jg`y@Lj(ptb4HH z*wNq=+pprlEO1Y-a$esC9`PFcziMzT3DYQ`M!W|+8>~iD{SYGrtIOqM!OIdAUJ8B- ztT=cFcn4TJ1WyMm8R+#W`+qr6V8Wv`09JE!F?bbNjbJf&8(6V;4LF4jsN8IO zz!un)9qRuWsv2A;@p0hW!F?sZ{4wlK)&2{5g05^;gUKxt;68Jsv@{ej#6}Zg=9`*t^Alqu9H*#(USNvUe01m$kp7?2v{Kgsc ze^cWg{kRf5p9j?0?h9}Y_#8QcZcjEE!H@M#@CD#yiRW(u-wsxK<~i^qU{MS5-#pdt z8G=d0ypEYSfe+i+Zf?(M(qOQvucW5lQB2ya%fYZ#c!8;Ni zdPJ1p7!Hu}H&5O2BDdc>a6LT|4Sv6hODC`;@y}>*H@KojnE&?6uvlP~{|Yieg`>d2 z)%pl{5_plso0@d+fWJl^79UF4`QxBCA;3pA!DltW*EPX+G{GyH;4Mw?j}d176&epzn-uu0 z3GVz%;}MQ*f~SLLm8DRoIHZ7QgM$HrTRe+N2M1JK&>`UI@3H@nq61JlTnOHlz^{Yv=J`J2c?Otz z0sVI;32MZ3FYs-e1fC2Q4~W0ufo};!0;?O2(cl{s_?O`8FORQSo&zr=Ke)JL0A=b^ ze`3H3UnpZ>P@u1D-~|dy+8od64)8Rvx;E?nVzbnC%9mvM6TU+g|E@NA1-PDk^(Pw0 zf*11qU|Igx;MHJdVLe(V;UyBppBUjoR9Ki_o7zAeHXGB$d zTcpkcqnQKzB6t;8bVKBCY0{w|z&#h$rm98#lq!#0#oFEyFN?FmI`}}@q50rr!23!3 zGh5-iJa}mW zPXez>;3?pZ2|NwFBY~%bD{hTDa3Q#Bgqi3{&-P(=Z~%b$sFGs@Bf!23y?pT{1d4l=m2y2 zJor>_FeTttKeR|?6L>+B=N|!|OTJQ6o50h-;*at3n>4S434zdnO|beCQhWpr%;tfK zBnqLL)Fl5r@XWu|rpA*mgzA3q()VM}>UBJCk>5w;Bh;UPw^ARgAiVz{@*{V#B=nOF zTmbHvc;Ii~0u=@$paUIISF7X*M2CEEZ}R)f=idU)1gkf8yEhBV2WLmhp9X%9=ZSv` zN3@WHkvyPS{4Tg2e2}WJ$%wyhg4?fd%(0%7>QlbvpMxiVz<`AQ6;rT?gyj@a zCzY4MJHT0)e|1WyI;epF5YE#3((&;hCco2MQmVbo*s zGI-Ne>C{k4>N=CqFo-z>&Mas~AA|N8Hc`^xsShgn!Hj1uQC1s`7pC!bJWj;1vn{C3sSze9zZe zwu$^|@U%q!F<|TExV@9gB+O0}xDq@sQQ$i8eDal4KLUO$k^dBUA^9paYdd&XBL7S9 zor(NjZ@{5f;trGtkg$XTY8@X39-Js}DtI~hYMEXI9-qkn4Y-iNKKNzItKIQg@SH^c zE8vAOE~hq-uqM%gAHmDw0$d>Rf*Scs518N$iTn}ZZR9J1a2a?;;`uwl%fV_2 z*MnE8=f(MdF9||w#h*|#1Kvie!TYNQz&cngCXs(BxIU48J9q~8K$*W5d_7p1Y|n6Sw|Jfrn)e$6Jo#J|l}`B!DMq0KvO_8-k?Lz-W^+5d=tn{D?yIV2yk#XsBu zKILBw)JDFKz`a!)G}hezt)q2l_MHE`$T{o-79Tl68#MQ~h@40KPOf%PtIx<;wap*q zYTd_m*~+Jdx5qkT47dkaO~-lQYH$s;2zD<3&wQ72q1>200Z;UAaC_ z@v;BWFs*mFkz@QjcnV$8C2qAH z^$9j4*1>Oq4+(KOHI;-aI%dlPSA(a3hf3Vgs)8eNZE6%P3S0bI@W#zJ8zue=c>Mb@ zeiyv-gSh;|)TjQ0Ag%@P{-jpEH|jSZp&6Zy`~-dRX*?SjgWLEMMrb|SErRUH{Dv&9 zNPXa6JVF~ep!OeZTl7+$p(cYjB-mR9Z~ce=&Iqlpd=K<;@|5BCI`~zvVyWfV})x2e@%K?n|i`X^Rzf(o3_0fY<)q+FKTcyqh->2Hf)Naj++s9u z-Xb;VQ~!Ss)z*$Xf`+Dl7B7Q~z{?r7l8HZpcY&2Stpe{&a z1_j>=5~95rZ0(5gz|T1p^Qh8C$Aedcl`H3Ra2vWJ#UOPzcp_LhzeIhnf$s(@YyJoD z<6z07a;o+Vz%u@Grn>;r$AH66Q=?@HiS zU$Kywa?#;n7uHE=PlD?4RB#`#s^DtyV6c+whrz?aY8|`_J_f7?(0Ugi`c7aITmUOW z=?w6NVScy^UrWMl5|pE3Dfr671AlGLsrswh)C!@-Q61lat#4{mn;C(?E4q@8Oa!|y z3+K%46{+1Uw81ieBe;4;d~NW%9u=t?a8I!diweFap*~SyT2FKlc!8|oEAVD;ABpq5 zDpF}yf%p@L;y%4Y9B2aYH1NWN^K22=QVWp$&EUI5esBsWq3=O-AWO>bfC6xMe4dlg?qpY)iNW0SicG) zF>0e2^Ul>3sq4uPWP<#Y!ATb1(*$o~O4Xmx-h!U^ZLNRWSgl*D@5$V@!@qQ_*1h?F zul*axYKOJ|+1KnZD56NGeeHiV7E9uvey4hEX!&eDJG(s5pMD*&lfZ$~of$m=O#RVK zQnUVy2OL<2h`)I|Pi;D!F% z*smfr|A%;)Ol8^ZAYUz$t2$JqR)1d`erOY(JOLiHmmQb6VO5k<+ew&1LPxpodUvTv zE%>fBH90Jh`Uau+bPxFwFM??)^3}5OYRCs~mihk+76TH0V%e+*Zv_X62Hdf>f}l4g zRJ1y@u5pFNZvXHjwDXPq7};E0RvTr-lfl!P#rSNbcg2sjsg*MSnBD$IM`*oUo(+cv z`}>dAhL>BjIae!t03*BMK$hs2a$e}mt>D&R@hAGa6>Nfq7zjKN0h|dA<`ul4b46+i zc!13RJ9u{@|896UqIq4a4HX2;UB%c$1EL90;e&(dz*lhxz68%qV0$o@exkxz;PEZ$ zQiH<^Q}=XxauhE$|x^St;Iv+%p2Ar6)&cpmku zKL+ieaFljs%lk;2KG#)`a&~i&IBK%gzYP|=H z`Jq{A&Ns2LJrBGnffs;Red8Z_tafDiIq0e6sSuyf!54y+71ZrVEMu^;TI#_|z-oGL zy@=R^j`6hq1M9w?VJV%ns7*!c%&!Nf4i|l7nmzz80ZWBZP7Tm7D&mCHS>Ot=61{uD zyApEp8F*r%e7AH(YI>x>TBgnckLpktUWPD@TXZlT5=;`)y40Y93?Qt(z%iDDi6kf$ zHp~ng3^+iKXM@|&;7B=wr@$+~N?|m!*iXR0CmbnX57wwJcf?wt zGEm z_!CQHq{K>nodupizB)YI06q<@OzXdb&rjrk44wm4LfO6rKUWP_LVGCqX0R0MGC#(` zXh=}D{0-pc-~(lco&vuZKakoE-k880D|iC~tZe_0;MDH8!Lz}YVAbK@gZqMmZBTsV zYXu2Mkl@M&{{b$8l~L2VC3`1WonA(R9|Wrop9_8xtWHBdcqLe!=bi_2X_UlS^f=pA~@g)Qt&u< zrhm#QT90O1{fke**E*(+f9EOMkaoAWLH#6ZTH}9sigr-@Pe`7dNbacloln)SXr9&l z8&Bn6^|b%|soGHE+F@85b@A@}1Xw&K{seCis%*@K5taUc)3htfr;xsya)FT1zh8kj zfK`9*2QLFF&3B`R6`;o^`v>6h=@=hMyD6hC3iJ97yfD#^;lo2LWuSfP%_be&<=a!W zgPKol>z_1L>)q@|n-Q%x;XDHu z%koU})t_i;E_knpbNm}tkeB%26yzvLW?hFpnT6_QSGql564R4QS z_Je=j8QMEz?x%^}G`UK2fyw+FybY`t+HXb>t^gJdi~REstw_DBx(F_|_wQ`L`TxuI z{tNtDej}(m6b?F-+63M_UK}9AU$fN5;1LsIyaSv{;N9Rh37qPH&?j(faGwOO0$VZm z^V78Bns@8qKRQi2ztc1_JD!XhqYZJhaVz+C-^=2qUk&;6kAqU9f?n~ne9IQJkU$X6QliB8IChtYIUuTq&=N zix)xYhtv`h?mMe4s8AGG)X^VM z;H>mlI_CNl3Y?WbhMYp3O5oae;+K;AOA6Yc&WA!SO^j?hct^^AqM+5CbOZEm^3OsP zq%Qn?C3UMcbP~9ye{E44WM2t6ku1gh`@l02_)YLUuo_+SuGl~R_97?2Lm&^Q2g-Ds z0-lx_(XYVQfK?Ra1K?W|<=+Oc1Pkd5lt4H7N>jn)(eI()sbFOnoLXPO4kGiLHy@Vz zBMG8G@h29`X7IV-fTiG5sX+aS_4^C(0xC@TpB1$(Ef)iE^pv#WomN9GCr5GNTkw5; z?U~x3R{gr8R-5^!o~aEx@n}Iem*OMl0DOCkxW~7FH%q!snhjnKmMg1!>Mrry0rF2UYbCg5fBNo!cBa;){5f#a0kH_}0*?Z#p&ir< zaZTVO!Lt+iVz5hf!EV9$ZUIjg)yw|91TKKp*XX|j&yDlTsb0O&>xl}E056FPq%H(+ zpuxb~LIVrIZ4QhZcoBR(`N7$U{4c>P6CLbz5SpC&4v`%?0=y%tpH*-n2`L^>1r~zS z{!3?ZsCp4{K5f;=XTJn5Pqf{u50m>lJTBBA*5fb0s}uRRf;T4c8t|wD-VL4vu9o#5 z+!xa$&hMN$hJ>CZ^pyoJ0nhcXJ)3LR+acSuiTUs<_|y2=)OX;$2m0@vt<|;c-w$o? z?|+WgBR2_hI*+Nvco}$i>%q}WV0VCfk{`(dZssj906U;-ubhk-kS)nX`stwjEB z!1ZAHd?~ezglUNa?}KaF#*0B4NIqDN%>{3!yjl!-aMwisZ@@FiSF*kgyvRT0d~MMF z??WyVZ1mTh&+fM<@zkZvzzl)?wimT&c_!b-B4JLVz&h}}1pZ!3SykMv0ky2TME-H$ z6$v~Wyg7mI0x$7vFTk7pH^^nMbf}Q86wC2QtXWlc^X92Hz-|I}Jqo`Ec&?PkYrq@9 zZ_*>NmwX1U0teCp-b?-JPpHRkb&YU~A2W6SM;8!(aYCKnc?N>LmI6yVNGYU4y9M@7 znSoi*ZxE`AEG2mp!5cgHf0&_lZ}oHN-5vZVpj$46ZtcH411oqnWcQBo_V6vZYXbM< z=vNO`%k^k*PjGO3MeDP`(;xFL)CM(cc^mX1|E!C&9Q#a)$_-KUk3LJ zXRn;Pl!P{PKy6odfct^fk^Q5?F!Y|T3s@-D{A>)r-&28@6fu2If#-t*^#o2~2>u~~ z$AE86;JM&GM!1Z69*ZrpIzENHdpI{GEAWZZfM{^&#ER6Pq6gR=!1L*lvP541|C)T& zq1H!Nr2ZEim}_+CNbvtl-?)` zYR8uQz^M8;@c|v1Hz&A7Q`3cr_xlIW?bziq2A$XrPLP*by99g<>4wqrib70&aV3MQR9GHEj=Nb139);d_J+oQoN!GYhF{9k~#Ch`}9 zcY*r}=_UUaa98S=&--8fToh+~LBj9wR{AREjmp?dlph=}9^p_1}z*E6$z**CO;}YF0VKLD=pKA6K#SbitC zb&tWRXT$Q%QhxoV+Ni4K86jWcpV)Hzj+bd^f9|DPRr{JNc@y@7SQ|}u{5vnzj_I@b zcub?Mb*Uw7!k&Hw-ms%CwUC(?J@+SHM#UrDCKXrA)+~R)Wm?YzDt7bM@~%40ZT=av zwa)&A%d|dKtzKbIB2is*`ZH(K5oJvz7kqv$di7 zpL!{uqWzX5wg2wrn&a1Bu8rzviEfcbU{BDkbHFS2)J4BrG-J4b=jGavs^-7sCwWO< z026}lS6`v^@e5aI>E;)W@H1Cvy{jJi6npWzcq8yvlIzdELaVCE)MExDvvysfO*8r& z)_CwoHNih`f)^j=A6`ZW7_fXHwW$qYHRaO$^14tf?UA(nyWlBn>Vj_&wik}{OGwzk zmN;D&_yOFS2UbX2JCP;C7C2tw&A%f5E`IA);z@JSInp~F$s|J@yM__Vsz9GO4* zPGss2!QHv|S|;)QB(y%9^(-4~eHT4W;IqLK=krBfnLqW<>=}O=7?mG)Pjf=0!Vgu6 z`u^}J8#3<#E1CNKF$R#pCqB-`5@0S8!~>5!p%Oyead~6>v%eyQi3-*{)i{6XipKc& z&%lvH`LCaCoPX*{WJKiCe$au(o=1oh4?MSuQ`^Jg4=#%iz6{QYl! z^&ku$a^3gWrJ(J0V6~mC0@RVz5TJ;;48|azTV$)CMt#=MuAJ^jE#v3F z%l}f#+Y++DzTe|aKuT4CzkpYNUK@ORTU4+KT)}VrEK@SD7Z!ds0B1(Xft$d~$yam! z8hCI&K3>WmA)a6R1Lax9qvZ2%Hb;Tq!LOw#mKZJ2%84E>XvvGIkJpOmi=cw5TeaXb z%&c39KL$_ypD<`iG%$WYK76s7-@2C#ECsuKA%C01-+-@qEna1>x8{rd<&^^izrCp7 z=lk=nFLWh z%XPtT*@_2_1dl*fD=ELNcZ<}VRkcCLkH|0f<+BaLYE$=(45w^EKYo_HFfjO?bdmq; z!A#-8(Dfql?+27=@RE4MUk+qW-j9Xo$l4aE`x2|*-a0|z@Hxj2c38`JLy<(BL7?Ph?pbg)Op9z z!#E-J_7q;N{hXf*mK`|rR6a_)Di)$$;H4V}q-`)BXIgce&P9+fl-gICM0SrKRn!8j__Xa_=HJy z^Gsw21Er75Uk6^^1+RtdVBN*2-h_#F0eC6-twkV#Xz)c6dOlMZ{M3fPEq;#X!!4o= zj$h1T6@(T`Q2rfo(qI|J&s`=BmW|-Syn!M9s<^D^bt$SBE4o51+akD{`lqP<|IFE( zeB>{JR?&g;!96Fd3Mx`BT#lZ=q^go5ybZ-Q3ikl3mYeV9sn@}?;J{>=Upa?${(R^> z76Up8yzWJ=-DLi?;H{Uk|96xL%Sjl8)v7k1FTjhAM%7B07;z=*{$t*Vmv|O&Cd^`o{Q-c`VyS{Co=`PJ$zU_$@3SGBC9q zDHiyd-;rNV6u9k%#t*drJ>r{4d-U3who*1tOyWhvS9p9JV$Ox6<`50V(=D-x9 z6f`*DW@O}9R+Z%78gO|O`?ELziyj@nkODspjJDI?gGc;sU^It4{)nn=#!q+Pq!Q&n z2N#YdUybNbeB|Kwuvj*@`xX=vs(rVdf=d@M!28*Z;A^Lflu(S zz zb5>NE^ht1GRUL8^JYPLR1jdW!En4XO>iQi5gIg6B}-Hrb(fz!QhY2FaMG z**z^j>m)g}6g-`L;e-*-w_ZW{Luym=C7uJmn}f;H0JHz^Az{ipg961NG}GD7(4oF` zKyqZlvuq|B6`*@Xg#(_$COnXXiR3_wl}t%*ULukW{0>~zhnEv1)?cJU8)~?Q37`KN zc&`_}+z_1qKPF+tk2R^;TzZQJCaglLf2c`KmKFT%B|4}xV%ec@`50Mp^Er8Sr+jqw9-G{#HbjBvRB zKlE0V5O840+l}#G-)W53{=G5&+s4ND)pr}?H{WZFKis6S-2Xq>j8rC$-ydyhj6Zq5 zG5*H~jq%4@8{_RCHpZWP)EIC7SYoyRf3dA`fxX)sW9=V}al20&w59@Ir>IvgXx zlxn*Xaz5AM%J$}i=RLytKP{!a`JNW3Y1f9Y>52+Z2Cw^dZR#yq!5!e~3&L-K1Py}w z+>AjYpYQq|yWx#!QdxfZ_jKq_JTLPn?dAD}I4~q0|4%q@A19wBGNE^KuEr8(@^#>; zYdK8H9`9*^JNwnz;5UFp2mVw+5Ei&b=8tR1jnE)WEZKoyf|DnsR4c;pcoY3@x%*k* z-DRv;Vbit4NPKrc?ry>4gIlJmTjM@%M|iAkU_E$Nr@BmKB`O3l*D*B2z}^ZM?mh+KH1%a^RZ&+&euLdeH^PUISnAer#oT8_Ii%6}&{V zLN>5rC?moXdX2_iMS47YBi?~1e0F#8b>cV!l5FrF>&;I6`VYJeK)2e zHRo9dB+KW<(jI2{B00c+mPuF%3wz3hgU2Bh*yYouu73)=jd-Ri4h~{-syMtNHSG#m z%8jvL>2ct7zh?Jr6=I)z%O#80UZv5w1w3L2uiVJ;I|(A0&skH%f{N$+y}>=^3f$pp zyPVH`YtrS?Ws-lAul=%9-prTMmYuVUS<^Ff<{|krFCOA=c~3jUpSM7(YMU`lw`e)K zTgc=}xty=hYS;C~m#S{^r`@C-HazcG1wwAwQvDUiEuw73#N_MVb=gndv>o2OQ+TtH{7oGKN!^`IL*@CTG zdfrPuZNSP^;{#X`^PQRhF6(p!FKbyUh*v6w9}qUEo6#?bS`HXa%M?aWi2aX zWt~z!Zy4~*F?{{fc0>Jj&sJR>u%fM*rMu~@Te3>&LeY)eZVP8hZa$+sMZJ)74S)1v zZA7J&bql#{+Dz-kLLuib+0xbyhiB`a1<&<@m9{fhChfQDSM`1{JVu_g>1ZjRa~vz3 z&WP@gXj^czZZ4n86!NyM7mZ*HZ8MH;yH3v3-JEHgAy2C^xq?;9+4*9|@Ju@@TF4fS zOhGT`o|m=_|H7I|$!RgMu45VLbk-_4dM;#-o3`9s0mgY|+9-OGm7bTiie4#`$$M$j z)19!am!*Q7m&s)GyluF$2Crmzg`AUd^68RMq<6t&WOc?@D4IFX%Nv<&TBc@D`Y!Ln@D&LVVf)=KAXF+~gfQQfOr`3Kds+t0t{psJA} zCr#7Ix=z-~BPEEg8@46d$h)Ns3@a3~PQc&cRYkq%m>Io5=N#9`XZ)S#QtP@qwT7yU zZDn%IQKpnF6iiF%&NW?eKOEOhq1Y1^8mRrNTIW^xayA_J%5Ms4D!ny(-7| z%X^;3#JdJ-IGfA4QI8DOfIn}mHr91q-7rnFWKgAH7+ze?Q#G4~!Mwhc0 zqa@g$E9rT|)8lcQcJxd%Tr1*$rTW@nsopeLYPbz{RL+h@XGitfaXHU#b`Ni1*#7DF zFqI?k(X_6)oRhOkmf;jFy{P9MH5`A(huYX9GbOK(^>SXiWEazhl~cJ5PSlVSbi4rZ5M5X8o@^AmD0h^fV7zno*1JL zR8tA6*`UjbfRf{elAVW=oPv^*10@DD$e;F&*28i$g^XicUarWRR}(=IDGz3Y5mj%f zO8xbJ*T(lV3^R|Sw@Mi=Tg-b|$vK`-P5SBA*a>Ict99-n6h*<+ZM3XaWaEenJN}#Z zYrUEoe!I4nqfheEX}e@)vTUe^tH=E@rA(U*rj$jfsE?NFS%Z>Uv%!jni-x-K0d3xq zxpXP-W^@!}9-vkBNw{vlpM7vnI+xV zpVCJ6EwI<1x}5@Bfa%6#_EgvWP48*-RcW>pD`#LwWLVmnqTlX2ZTQr5K9kegKJskU zcG0mU$E*fV^g_shrDVWrkencsJS4@6qykFzA4)RO^2?jF!+Vt6oSw~lw&!?`Uhpze z3wp*s=pn6_Kd-9t@O~vDpDnQ?6m4vPT+WP2DRHp;-@eQ=kJ_MhvC{?5%~0Gi@&;RH zTvm?QYB1z_g;IU>FKkyiwydX%PR`C*hLKCNRO8+##bz~_lK)Ur2&@LBuAriET56n; z;vzRhwC)rNo}D#|F~?kC;*IX-+IFs(ck_jG$z{7&GRuss z=KNdMXk)7k$1_T~qKV0vD;7$*K!%1GCi_d;P3H@F_Qq&A*|8q6l?>Tvg~yj_y*tX` zg5{ivoIqdnc|_}$F|2}tL2Bvgv}ahB+Dj-T$7M$v14?qy4mF1E>DjE2we#6x(J)-K z+fhz68fuJDf780K)#o!=%SH#XXl*49l$8PmC0SrMC=r1&{D;PonTQn`)q1#9!ExI$nU}oj+3CF6 zJ?vKXJD#dP4Dg`PUd7x6Vrl}i6*ECu61@ymMKunnKKlBjMRB5+_t!$U{qHAEf zs=bT?s*8b6nU>9GuvAU4VvANLqZDZ-)*cx(^O!~e7YruzuRB6pSLaPXs(=7%$7KKo_!$YS2+4C0#pl}~ABRhhQV$$@i@m$&jI zw!iP5(rV6?qjw^fLrL+2l9S{#C}j>MCle|vXG?xL4H+qcP*J&zD(4TatQ_0JWmHm0o23Ck?zN(G%`B&=6Y`K)JbpXQZa z4rcexmdsq1>G6z0T(1}P$@AO2q>XOtU?qs7qHbC_Y*ulY95K~!i^Z&!^Nh6V6mvP% zfE%x5S51nm>;N)DJHUpT*wzS-Z;7 z<-A!kJz@QEmbY_yG3t#{@@}+lp`sotJHU#3@0}BIOLf;RVitlR8y)Y3pTh73I?$tngIj4gaYZw9Zw50ZT#EslYt!k3uRr zY<`@V?OZ9Zb^tHh`=M#?YhGj&fQRaXbO}iIu{ZLY5pd`oq|J|hx@4~)~%HT+pD|!Ye9$B5g zWtUdpzhFDrT$+8mkj>`pk}?69t*GZ-XymkI%@uG977N8RwxjF6_>wli3I}0cN9p1z zaNJzU@XvW!yPz$TnASZ!F}TOf0`H-|Ec7v3V&2Ty7;>m_i`+>U^SbHeO*`j5uv(kh6<-*RG7CSFVHI(CgafhC!M0PCw=lo3 z(LHPhoPbs)Z#rrJ(6w5x=6H0@UyI;vS*vyQU;9X_4Q&gYkr{NM z*t*!mN>aU8y0R^xq-`OnaJgH$P&pI&VpiB@reMKlD_xLtCW?i!K(WBI$g_y?vX;=U z*x5?3M7dD5p`>Xcs8BEjB}|LaW#*9voQ#pj05_btgVMGTCBu0WR4CF=(zXy(C?kSW z{ZcxLH0fj!lo}j5Dp;)|&FQa5X>yP#O%6e+f_{3HHnzW6#1iy4X4zT%yJ|^NPTCxT zGX2r(wVwM+>jD-9)`jI58ACTRX&uuat6WaA9!ztO0>{_1fnP3bWxayZOw{J3{WgEo zj+~mYSvt%>(a|&L1SKU#gJh-=E*b0#OZnd*B-ae7rAU$7GnBnb5>~O8g>+WWny%v* z7>H@ll-91um)wPt%z%>fO8eoCPB|qyP*FK~&=9#%%W@AQO-TY&rein@kWtmJuJ7a8 z*lJEOIea7e5{tQ1@RSr9kpw^mPP%I0#>Bm!wXty>+f9^=IAQsEW#wp3&v>jjoLM>& zXJqA8K%b-uB&bl|2rB9l-tga6RgSC9*%>#Two3SVnK7k(C@O6vL5V#_8aNr7jorg! zE2de`mQ=jBYlTpCHSLUWgBZoUI1d`qWF%LZRA*b3?dI4!N~V#XkT&GIs+=JaBUF{Q@TVc>PXRnikgwmQF5iL zogsy;_PoK#1rINGWL8eOM9Ia~KDOF+b$k{^HgDk`%%#;n!n{SS41Dcl+G4zxG8V2P zE6pWo=n?Ia!Fj|15ic&i#=MlB#rI+Ohi%fXuF4nF7*6croJVmY=ls_STZTpvocbGEOe*=5aMy+!tC-dYnIEi*{(MpA;T6n8JDv<)r5`8MDAn zC<@Qoq7CmT)e(LsIrmV(iLf6#buA?TOeD|mQp^4h@C@*KaU81~RDtRpF@vT#eKeSK3~-JiE!Yt^-c1#dgt6L5RP1*kk9TDF+-L;Q7L zYF+xK^DwdG6 zRpZP;$R<)WM43;8Yd&8D(6G>5PaF;BwO|$zzMim$C#U zbq!S1bG2{bwu#uF_ASz)a`F^LeQLLYiu#3H)}QbXt$q85f%5ESIiV}oE#&iQ7u{l| zxky)j5^7Vb3@WNkDKLCFikr$6OMN?=RSxf7#AS|WgT1dH?joZp5uR8)%zg2DAs%Qu z5B=$=olN@5#*Cqw;Bv>s5tc1*4$kH>c(W}bL?cckx&x%!g%anEoU)5zpN^$`IuMdU z%BMq$yzvv1>^+p6gV3kb!$jZVE@jW);Ob`8Oj9o7fAX2S+sSauBNoCe=1VRY8_M2^ zyf@sOg?BrD)4F!Uj>RRTsm*sv5ZY4=VCQ*)yFA!oWJFBtpo9N z;!savB_H@An{XPTB!_X-NCAP8q8+($ zs8|UIlvG$aZ{$8I+&HQ}br2%W^|yURC`Obe-M^L>oK?nR>T${`a;cZMO+8vM_->+V zl}L~#H3?MIJbUKfcj4Iz+`?%Tk;g1#F;ltnQX1V0-NM58buezjQXaQUmiU9Lt~>|Q zQ^#t73XFhh2F3!ulr$zuK94mNPO6=b&Q6davmoTzNl>9~5LC!OL4}MKR5+`G3eQgB zE{7wbmCkU($r9Ev(4-KELg6r>|Dcpl0UgM=1zSpY5uh@4i+NyAD|5woS<5NXlS zq`1J0z_Ws9Aj<`i;c)PD3a(tQWuarr_$BIW0)7S8)ey9De3Rhjx!(t^AkH8qC;Q#O)23O82 zVQA$sxX=V1)y)20cUNgU24blU?ylMCPTh;WMQ~EV$?55w zo^!JJ^G5wsySO`nYMfb$xqN}MHG(0Bpi8%Q6(Nfmgsnu-2Lhfc_s6^Xn@IU`S>)l&2JM!<4p(GnBmh24fJNJ=(t zo^YX4g_3L|bPE*iQZA3Xl7(0#9!V}$QBF#SAw}E3uVxzDePO2Rd9?&6C+8mzk({~6 zfkZ7*w28Xp1`ICQJRAjlhBUkj#j@Kjg?w(DvWs zK@V z=-jd3veQk|PP8GV3CE3;CMYSSP{E15Y-KpWWN--LHq({YoN>r)P*9TD_;sRAOY50j zx%ml73IraWsGPK;$yG`YDlX@xs)aE|w!GUCl#~!CRWLNF=_yMSJ4ZOvuwf&9NTZr( zZ>`@XSvJ>JY!ryC_zF9 zqUj1l@un4v#2es7vN$bStQ*;_I5x^w4j>4%BSOh~pyZT5$)Q8ZDTa#m#!xOIIq|s5G1smRiQi znzpz_Q2{lgoMb2d9XYp9(Fj7NAx;*=mKj{ba{11+O2i4JGlA=eIdWoD% zw5imK6{;6q*hqK>aF!9a>q#q{i#oAI_CQmjF9`ZB;lN_KN3C)BF#5pCqehl2;^IBx z4se7p4KiN@)JVmmBA{%%9)Z;eA^9XCpB_B0vbTTbCaoT`i0C%LbP3L3r*f2dQb-C; z6az&KO4r!oH94^nT;mhi%EawAmbKtxsqvx+C~8sa#*Wktl$2_y=n186>`2`}Nl}8b z1}X+BeS@P)$}Ut?Ft}bAJ%N45E2LeEg@ymeiJ795P~@+oi%Mpoq?|%Y#{0*;uMO|c z4JfZ#n1t1cc#KGQGp)fTQU5Ff)?8oVVZz6QGdtpqyjZ0X9Erbunm`P}_B_`JEPf{;gaK}kMBNd`bkjzY=7Kt=wb?snGT z{O;f;blF)|oSdjjN+@wplC4mxR^bks(AUUvPPZK$Nlo)+f*d5pRFiQ~E-QklH4d&G zai?6KDQTgwT<=g)z6gwp#(_I%=U#1ecOwmph+x9&hx1P@JxZGX+wCevNN=*N zsci`=%9R0lc1E1chIi*&O0W&CM??fSbHu(d{%&+%Oh{f1u?&w>JE6pJzUp5XerFVr zZLAq$7BZa3m0FG?scaQV1)*dGO7a*=b`VNV9F%MWDwLJrx(mfGdW36(ixX4L0%fGE zM6N?xQnKQNuEU(kb*--Fuy$}~nrZ=3PPLg77Ouzf{WxhSODI7`v4+BO;-I9k;QfmR zB86oL{!NcgW=sP9c`-vWF7h4HIq4e`lLheJJ>ifR0H9GTSSx|jK0ZpdenJU%HfJnl?b;2EFxwnIB<{FiR1FvH8Ag( zNL_8+c;LjWh?TC~a}biv$~{L4K{Q_1N*P3xcQNSk6LCGjOGk#XwuK`uRF+Ut6>3$7 z!Bss73Bo}~urcxDgr=#*EZlScyIpzFD2TasdAT8D=7L+=Y@z|RT~J)k5R{xDH{33A zuAB2LVggERXxWlt8h$!Ce^IOz!&38uPfjWyC@H2;a!-ef2BsD~e!8eWbp#J$t;*di z_wOBzUfw^`l(H?Lf*CoIpq8wShuh5(LQDvuoICQPro$}}HBHD^@ z7t3~ths+{ZdV;gzUeS+hr<`YFFc9V~LZ_ql)L!8R7aDExvJoYP=iMW8&In#U3Xk5? zL{ymW8HD-}$;NS7)__w-?G`E!%f^c*844vC1tnPvC08Sq)BsS?Zqcm=X9(Wr!Y9F5 z%fnv~HKn`$Cp{~B`LF$5JG`I41xecB9ll)2(xa&Tl&BT7)9qR}XWlQcPtc>1QpdIg-4{RekoTlX}0b^ z(64e}&u}%7Ag=-hrHTh`--+zy_^deGn#AAa)V4-B>GlKWl~Rjv`Lkzv7t3Y1?J0eKG5S6o?e4kgY$ zFh@@>+1y=oan1Xa%#(V1Cqvkk;E|9cUC9w?!Cpg()HH&Uyn&KTg_0xH{e!mgf=~gc zoQGcyhq%Q}vhOc(y5k*BDy2Z4JXDOsJyyYoHA&SW32_uMN?SaP;p)X`S z7r%H>#qo>$jQ?tXYSjI9f6+#tgpU9RE4CI9M>s~K3g!8i2b7#d@pYuhBa5J-AxU*3 z(qP=dRUi95exkKHy(nJo)w3noir>|XyDYC0C@)o!pcGqFT$M@(RR@aL1!=Pbe2& zH&xrb) zTYv88{YVMFDWR;cv<%3XP7^^%RR>)GBbU1p^(#@p(;BrTcO`P=u7vZQms{(PGKd$Y zN!xSNf{X?x_aq*WMvI{2#1R827b{fML@@1PkY0CQNX2W)!IrlWOrlq!YTbZK)kU-i z*HOf%B1P!AC_hjZW5&=JuC+FmW6EfmG;d84MdP{B%HOwFSA&JKk41&3{Oh9Srk^?p z)YQK&`;(%AHTzgp%&82B$ey z?SH9N*t=m-zE$v_%LRos8pFaKfE%1yq)6j;Ig)_%a}eJuKK1-JZ@??44BZr`d6+$sB5)J@GS zo?j?lblzF#&uo}+(FJE-ls#`q-mGl=u`7SES9xev)=1;@AS{qqwFnW(`Ja20zpcs; zF2XfbiAYTR2}RTY-(i*4bmc=MM5u7RML-DO0g>lPy}@sHLgk#cM8O4t!6JGar<(uN z@XBkuas1<;i;I&F3t3)K`i(h$`J+$fnNm7u5&4T3n^(OY+y7z&%@ATvYzv=Lz?Yxp zqfMc)OEXtasGL(pO&mQ7+?;ah!NdMRhl#GG3G~eKwG|Nv%(*jqX7N;>Av}wy4B~XS zF~O_v`Nxi|ytWGWxyjeCJdamnL{N#pO{5Z7f$xl{7ZG$rJfwf+C{ptd=Qh*jj*7r4 z-na9+kFLD7JAv?A2?`&fK`@vRF+{igzV(&ms)C67$9CuScl;#WE>9f8Q)ULAc#g1h z;h=L=`~au&Ovn^o*Akb1_)PiSm1p`_jIF%3ZSazA4ksYr1B1`_^L=i;;0$Q9e>MRj5;`8I?>G?w9S8c(n7Y{}wv5b;qH1k%d+vnG&Q;;K$W z!JCfwUY11+_mQG3=P%-Wv%KIT-oeQE_mJ8hZ&}7J5CF+L8QfIJV=)c}&a+}R4Dq^@ zON_Qds1)Hkab2DQBLG4>zCY>|8=#aF+R_j-lT~w`Wa0S;iNL=w>1BzfEelESH2j-*~_t zb~sc<{Nnw3A@BxwmNudE+**pDubhA2Bp$*ekw)lw3&G}MRE6s?SU-?>zQ*R-EG)hY z!%L`k!9Vmk9^x89L?UJ_*Cp0Wz0ZYfC6s|ItDP0W6|9RxE1&Z(IG#=y`H&4>F5Z*p zdX_gi{njUtnlte5FbD!d@zUmOf3Zj{Ijm;FAjAu9Ts3+Au*opXa=4Pijp;Cp20BDB zi!*u1V))7zPS7|G*SjU#KlemBOH4msim>?V8;&wtIoL#J`_#i0@wGCKTV6s^@X_&Q zvOk?9=EdPlc4=x$Q|z>>$uf|JfpXs$r?86+zYH@kQ*&g9#GH=iP!Pjlg9dFUG48HRd826Y#R z{+za4B;iuz0X%+1qUF|{Dh8V7b1LE@mW2i%;y#D-Z*ezE5O|hQJ;a`G@BMfhoaXan zCeeGWXWZnj?f46(G7zNB#sWu$iSNjjeEoEa;#bKQdH0$xh#?HT9q}@$Op3|(*-(MJ zhee=kG$}Yb0#4y@FnM)?P-GAB=R0+K&kzG7h$fAw!aS$MYY%EFGg9uexEpQ0h`~D3 zU5B@qhfEVs5hW;MX<4i$-&%=An2{QfvG96!iH{T&E#A!Vr)7mKvBF)1f;ZPpIGyqL zkjhsMJ@L&Z@q!ZHlH*n3T;;Gbm${{!$9%Cjm?77Ltr9sDZWUH7zC4e2C5Zq;z{T6H zgwPd?A;f^G^T>ZM8y!oV7OiSpuU{@z4j(}zF44iv53hLZB|UJ0?OV5aUFNvymCo=q zN}E?#_#P0q(M}kPvu`!%{-o)Z?g(P5_$DELydA@9Fu}ICj}`C%K)P_K&i9Lm^yRZq zIh*Ak+iXpl(3A&5bn%TwQ3cYTMRXn0EOK|733TN?c7j*Y!zx^Y&A6=M%AP=>@Va3i zt3dmUDn=Mtr^vhLd6UZ@wABBF6{i2pZ!6tlxMvAm!+dr52%T*NK>_>L3ID=tnG9a! z!mo?@#P-DN@PV^(-=612TJ+#hlh0%FK_KqML@ZMHHu65!z+ED2a4Sth(0MV7KrCUF ziRI&sU@PO>dM+nyw-}AfjVP(+>Q!{m{=*=4-J3wJh-z zD4{W9XdpUv|JR4&6Ul!nS`M|GJnqrJzB4=UE$rhQ$}2qTj}AX!ugd>H_XckLeQh8- zq|!j->-kT^mZNr4Wyx1@9^Tic!b31k{abzili7~FbxnFz{uf)0bhFUFzm?~oHt>HK zfQ;3keou^l--aConeJOrRG$*p*k9gc+-lh6#8xXKNB)0nX96u(RpxuHLIOyt_Q^;f zKp-KQ+@w;chEr9!H;^bX;=mMqEue%NAu>;*yw(FQMG<*`2%AAgY?aqfZ3)sA?SRCm zw%x4_dHn#D!Qkp<5FUdq4m39JxA&RqR_&^N?xkJ2%(}JDxA)m+58v?r{vYE?Vgf@R zOP)%cw$`SAsN!)&`^dNNKJ6h(`{se?MZH40jpQpOBXRqtc!$7qqk8DuN+Wg>sIK_U zr|u7bl=7p4tZCm|tyO(QCC*Ok+muQ^Po?c4-gk*N&Dw(-!c*0JnRb(JR{QjMm2zAm zs!8<_oat$f^eE=!r#b$^s3SdS-(b3NX}_(tX?XsJcr4XJ`YS962&VW9@zzV+!Rjf0 zr1qV-zf$xNZ@t8cY<;Tir+-~6@Mwu^M2&TB^(B*p_Kbt^rx+VyC|P}msoQkaF4f0o zy1}?1noe~PTo|eJ4}ET??IGT!i6`Co=D~}@2B%KI#CbWQZD^5&I6(CdrX6kG&^k@j z@Cv@k<_l39s)zJDItdA;c!l_a^wX(nfxZ&r9vRm(bT1uGGQ4^4;++4z)^3PWQ9VRA zr2T@_N9@oZ`Z|brX%HXxRXKzd6Bchh9mY!AS$ykFNB`1iVcH(zTQ3P;Ti-^bh{6th zoBtt%h^Q};UftB-lvJ@ zO4~!c^|Wa@^r@-mk3Qgrww-#Cgv>MQGXz&znuA22Z@nG(BV2zWtWNcie(Py)S8op^ zI)L>mvOm*lYx)|{_`$S2#JhBevPQ@=GQ|>`N`t1;_7GoX(@@ql@KJZ*TUQ;Z_voZa zV$Rm5^s$-Z6@2C6)k){tcClz{y?3QPHdFMVJBT-Qzp^&U|DliAv^~T-dK$_aCv0l_ zAIEI`8Pe;fZY{nb%^H}30}d`geZ;1H^H|}Wh6bijSk*xa`=0_o@tdc=Ac>mCPmNF_ z{l0jEPCrTa=ESw49;Tsz>0>kLV5I#IBX!(EdOJxUn@JC&OqW7FWDeqt)kbc*$241D zx~5>2;#V+vWQN%P8ls=Jhj{DtDs~pVPA8htK^ptNkdL=sdc`iMk4@_<1ol6Pp7AWD zzfAS9Y3)JZS+Ik~9Zb1PN8A58Vv;Tiq52aVG>sK0AQ#jK2BH=?C>+RWDOW}zp!5@% zbLC~7Ol>_00}6%%Gztpfe04f;(LAgNmlGHzlt>Z=m5$&-g+eOzH>3`tdVW&Dfq+Ai zElVYm+2v>0*Y`&0nY)0(t|R!S{3RB;2p9Q`|vtViil8Al41^WNUzGTX|nT9(Lz@YgYo^Q~jLC#&7SvNuDH&T(Pz@o3NX&fQI6xHIN zs8f$fSD94xJK@eqKjkE(foxc(=*eJFgryhO1?qaH7oZ0)$pu24M^%foNy_51&Y&R9 zzperD0JtM{C!4Sh1j%*jzK%WxCmIa~;K88)psGOum-KJo>M2+cStQJ_q?}X52XJHh zdnCuj7i?bW+lt^P3Y2$+8mXxh08_n#eD%7_58eI2B;&&H!`Gj z0*h%^$(RRx>jm6_sRYQek7w2iV1}I%KsnAn_{l&#vTJISfOUYeQp$?bC;4J}WeQ{# zsifafM?2)Lbzoo(fV+@NPvgUo&&z9(C#h<%6%^+b2+?UguT8vEGmtCD`>xMStOJ-s zSuc27V5xJ{D{nb6E_Ys!>IwXikpg*Zam)l+eyRGGXJ3Ibr1T(FCKL+%7DaTYaSt=s zY9Ftst}R6(AXlIs2^8PcxrxJ9m;|N>Szs0Fzh5ufPYV${dq0iT2B}&mJhc z3YR;L52h{vrBw2zAz=dd15k_lBk8}ny!To(B2~zTqICet`5073na&78t+EYqbsLqo zLm@8sL(_i>dF<7ENl@XyLm?1?OHIMDrZEEY^ZAk!(6CX54tOj$b1Lsl;~oxl`-u)k z{>aS*=?4CqDiG5cg8m4TN&p1g5VAu!+zhI=rd$aH4PIPNNfPq<$}i*Ib5(mp}M4s6$MS}B`7h@y*cwUpA1|@4%Q}X7AA;k zY`z?Ta`T;Sy0U>!q)N{C$6GS%{r=<(^$`>#EhGj2?HzSYRjv;A57=XtZIR-rWST=p z3}pzL0n+eX=mAJTP1Yyeyh3l_H|@de*dGd=RzZrn{#y2DLhwKjz#@2Nzv1sA5BgkY zg>Mxdrp+-?u~XCjOf;M%@-^g{^~v;xB+H=FQ-2aU_W8_w`zz=Ovib^%dwj@nlF@`2 z^9pxvSs*>H5M~haQ0&mObtHGDdxdE6B>_U4Kl);B-q;9*4#Ap_s%6zu|%pr>@bbp=k>~^oB{pNgU6*cECXxF7&IbBQa0vrVo&Mvo zqBX}3HAI@QGC>YkBG~qyRhcU- zG6ak8w2>s^!5mvpRBihZQtv`-*_=lD9SL^S@S=JVx!H-Y*WOd?ma;d+g20Qmj&w$R zsU>XMS}V)~O*b#tfhwm2M_>_)U(tD&6_sQ9tr&+gtYeLdD+XI;`)=OAQ$;2*R-LEH zvUJGrOxzKJ0{Wh(euetlzRLfrll7dhVW^Ytmj1PrE~m8rh#Q-Kr2hW7FhE!GlN1f> zkV94q`mw2z$vGO*P4SHR>h(>=NytaVL$M`gA6ytUrG}YB$L$%M&WJ#nhG{(YLm~45 z&m`#%*3pH;Sn8pv*SbH-NDE1{)KlsATS%#;9!jws{Lmf@nMBo7>9uaN)RyiAcH_)^P8FX3UCLw%3v#m zSD{HbR^I>3%(pl9k99!10{3O~NA+=q?7S=Ul3yni9zIEOr#%w=i5F9SnwSff=lMH$ zgB*zc6vEatPrE3Wk53(H%2T`A%NOe;uT!pqx)Mc|Voo7le0RmXzPgm=;ODGOlM~wB zG(MN@O@nh)B~#ejrhl*GjJHbFw}A%JTbst$uC--+*IHW!H|$ZV-apL>kZ-s89 zeT&SyJM)$|VM!1_P;@JhI+nb|+Jo{LA_?j&K`BYCNU$0Za-&+pod|#TG`zyWfZ5x|*Qvc}{DJLF^>@?D#@aUV zx7nMwSH0_HaHO&WuoIr_9G$ZQ>63?l%Y2q{)+7u^p zcs`}yPNiRy1}I_%pLL>Lg8ekCTTd;18?U%@xs z)kze=DmF>jvo|%pmv7b<61TKntog-E@0GaFW2x+a^9Yi3sJQLWrm3{_K(UV1I!LuD z6y#eB^G}UJB%qV1DBeKRrY1YM2uf;C{vh)kQgo-PVS$w78gK!mK>Y=qQx&rd?svs| z51|)SPN?Ud+>n5_NoYKeu408nT zp}nE`mhpX>S@{X79wxu#O=9JhrCtjvr?hz0dfK6Jx0g>lvjr`5-WJRupqP z)LL*Q0-b6@rB}%%8nUgabpJlH$h@W!PZ-3C@Jg!6f9<+kRGfV%@$i2EVF0wyF2p8Z z&e}4bh~Acqj6&UltUs2yXdc{%ih8jE|198Lj|z^S{=ql=kV_K&dOI-6Pm=oWO=HES zr>SqAizLy$r|poY#@R3rHr|V|)We5;4Il_9%zC-_A2Ub$9>`w^vMK;i;G3j|GVG1T zHZF7iMd9vRE+L4pH;wn1wQ1CHSPbs@8cE*bIS&o}i2M`NV9uHpL4( zWa9RLpA!-=I0vbyAs_#zAz&YEVE|#I!Z4L1aBg*|R*`7H`{`tPlfmv8~>tsSufX|}{QAw`4KeNUGRo$pVsSAf8h&vBH z==FDJmImI=W3CZddCy~F7KEMD0p#*7Q~sn*nTynGLhiahvuKg|jw{KXw`4pcl1^_f zVCR$rCFja5=c{$lme35gD4ne;-*j}+_sfJbP4_VwjnJKmr^f1}jn)cA@giW!5hK!(x`LpfLYIPXDP4u0m`J3w!lnzk^B*6~9N{zp zS5tI~oK=!W+aQbN+rQ~7m9M@(J6oRfP-d}cxK$E+pzUwN-wxfeyz!yT)X7HIq_+6sJ!E`jF5lv^US`!_1${7b!yUsRNdE75E zXD+q2di0l>bL=ypfR$|mb3H^d)^`jqOvo2(O;gW1NlL?1>0V7*`z|77j=&2>2xY|z z1Aq@flyeRlKg{ZeX&E)YnbY56bXjfzeu?|{bzsR&plSPU3Tn< zwl|H>-YHFe(}zzK?kR1JP2*K+ZyKvVJx$+eUV5YqTy#mfbavT2`-3WJuz8+zp2!^B zUAilC+pPKIA(Mk!L^6H1YeC|mu2e-*U+AXqhxMbLu>4%bhK!tKHF79fLHZG&jZ%n;AbqslqTK#;W}~kXMO9IT z7I&~J*b>j3Di{F95YK|=f{6hsLq0jpAWv_Cpy?zI18d9pdk?mR+h~f=SUVeR+Sf8Z z^QuVOQ(owxi_qoiXg~qW^{^q&NA>B)#%WTchMQ5h?CGHxy5>%3ArKJ6)3kUzsbxnzw zCE1nT+Yic~*cBf9AO%)nlhpYZxsg&ll-(fz@KE-O$=Llk%=_qixiimXiy6GL^4f>8 z9ben=R%}wS7Kj0*jSfILpo)hzK#>BJ;@wh;D4In0)00s#$>fI#|x_yo~ zsibmXsoqkfd=23zuz7l}?c&R!_(AEroz*_8dDgjd-DBDJ_|RQY{YD|i8g2t1U?|_d z976fSmxFy05#g(qIeZrF!*FfOVYCP`baKULK@45l_Sp_swqcJ2-)mTe(vQ(sg>XH% zl_E2zvLUFr;1$Uo&UHS0?GB6b;iiavFUD72u>IPMg-l%xr4CcT2K+tkg6pElg5gWI%M1e7U; zV2K+o4}%Q3`@d!n6;S_Bdn=zOi~;V`Bgx>ibH?Qn|7*_dg%^1xAf)8NzzO4Z$fC#- zNhLWWYOvsXnEqKV2mg+b&61xNH_8@=+JpneuL=5HqD>=>+Eu; z*nqf#m^jtgDnzymo22^~E|m}O%1)lZ!3C2RYBGTq2oVTUq`W7>8_RUINYyJiX66(H z-Ggg@b)nyN*%s9C5>?J9G*{%3^ib$@e*=rYf6W)7RWi8dW&IC)kzKp8Sy5Hh?n>-e z$Q8(duj^UgLa}K$3USU8T&L_^bbea+{i?us(k9I> z<(G~2wBe}LUp7m5wI<#%<=JT#s;(3-&zTgQf_dUyoi^GA?lxC`_1Wwda_zI(S)yF< znoSC3agXJTl=;%De&IH~PdwgJ6)W@ds+1fx*7P3Qrgtr7Rhj#`?Y7vMWwst7uO?@S z#w}j8-eSAfW&OGAB6;fL**SvQRmI&X{KkfBkc@;Zy;Wx~*j8ni!*xVWAd3G`?yOX6 zgwwC9h_ODZphfb)*n;V2M^nrYiVF0FQls4rrk}8n2W?fI{aZp$E(ITu`fwc6Qen}9z`HMlTPrE7V)@wPc7`TQ^E z?75Qak1pAeM3pfv>*dPOBU^6IWmZe^9J_$84%-{mtcnyt#4ZZPjw#hp(0QDkct`PD z=*35cJ5VpwY;&8y-o0?_9^)-SvQ;TiFB8H(x#Qon%c*2ZeKpK2Y*_+P9K(9`HaUT* zvF1T8gu5_Yr>#;EW-Oes9X=jsZ_t*_Kuy$UyTZ(pAEp<=GJ*Ss`h+0jc}EY(LNFzY znhL*bmCAk?j%~fBx4?A*Or{M^hA%)>!qlfnA-tzX?PRL4QT?h=z@NrGZt{X^%bkE( zLv=O^*Ht|Dvhp}W)9s@|bb1WgM~7xBE;a0_=*EI9Hp`7**{I-m6*ZC)e^mWzw)7yf zFs*RA!S2OxC9f?H{w<4M9eG)n80ipd=3DHRda`r`DH(Ng3ad?OCIAob1j_(43U+i} zRmoF4PVh3RuSf!NMV0gONDby1D9PKN$}Zo+reF!p13uB#&MuXKyH7-_h} zK3&#T=?QgAT`H=P!4h0|O%DtVT~zx} z9p$9NHwwRGqvk4_NcB^sjuQ7*^k7&56$pHK^(RAhZZMCvHzFHu&2 z$(4zSQQ$Z23MxgDF?0o0DWVKn8U;3s47MIDfDTk#O~{};x6K($Em3sK! zRHB#59sEwEW+t!2LgL6_i8bZ#U(Oyz)(=-C)rzS#i{W0a$WvyC?{Xeviqz_;sAvWR zivuzAFiT$jdU2qr0Tty6YI0t+;Had$rRwI^SF-zwBBh|&Op5!Km;-@L44l<+>GN|I zX88;H6%&=GIB_*Ed6$=^SRiJJIt8rTm=oODAP-9w`JIL0bXC5#g2%KBX8`l!dDs6+ z96dgO6brA*QkgZVv=@&Zh$8BFdAW6#_>N%jGzsf*EwQec`9L-lr{F75v(Ozl4BEjk zU--tH1%k@IjWQTpXotys;*$UHe`I}%9HZryp+)0JVEcFE!54_9~?gIPL-P&5R&;bN8Y%?gH5ksmrh6lDHvalO2M znaGI}xN|&6%3P}90Bft~*UAlth;7n8UK}fTEfxDHw+Xm*>_M(=mSshogA0NQgyaUo zx>i#eJ$z;P;`^L@@H}65|6u5hT-{U@5chDg6*^r!GJA{(Dypl)tjwXqt<>ZaJw!Y& zD#{>1P2eQKu&&jldkJrZuvzk;H#)QBtp{5mhZhV>1ShM!?{;x|@G>PdX66jwJsAcZ0a7dz&xtw=8AViMO4AdXs_S`rNf0rh z>TC^tMd|AKw*34`@uu;55!z`iagSS=2umw8<4lf3x%VouRpdM9<|ri13YJm9tH}?p z65p|BC%ch*(Qx~wQ~_hJ$Djy5Z4{v}LJ0_lVRyb596pq~?e*W=WkiO^pkfw=0PG?n z@0t?f8^Z`z8Id|V^HGFfl`zb(ScY{Fv8#6GB5L~$wW161vbEy>Ob&CQ#~$?PqZ%CO z@_*#TP4*RD7~yzKxxx$42N}M?d)?MXuXPk!F*ser>%f*I5WU9~32*HUaajiuy~h+0 zfdu)xadDWhtXx&ko0wOJ3mn=deN|Z(OSFAwzE<>y_Fq%ns1VKZ;AcvC4*BqwhD&zF zGIE9J1em^v(_+$y5oUGTMH`)EhGEFB7sN*e);NL0JTzMvQ{0(yV^LH@5wdf|FAZcy zQD;}>CyL@-6BbP)=Y<0{=qhr_3gJSs-Mq&!7Mxv?zXDL0p) zCRkn;%jD+0or1v9BfA4%hYCkkP^xIOxchWjWXCd1Oms{#A}B-#8uEy}opl0_U#ARw zuu0ex$Ev4EPy{9r8ZnMlBJ60d0c$;Wm5RSnOaP`3x7?!bm&IC{t%}P9_A_QReD7!s zgy->j-YQn!uwA@C{-P>w6}Tc4DSVU8uo@ao`H7l1PrwF@z1S&NnhlpsyOP{%ofuz) zN3a85F%IHRy{&o06dbf9MbSA-{>^@3w%o8GlaWt)!ofOfl9UMah=>bu>xTTF>$uXD z=29<0`d`YE1mHDd{ruD{W=5IP5OudqED6We(c8rm`MnACkc*9~TrIU$yMc>DuAUTU z5(YpoBIJO*T14O195J;l{ydTvam!Qi1Dbg?$E&+b){6(n1Qsvx_c~Th0aze`C&l;g zG^oS^vZmE+-~qtvw@JSEEpbei%m$2qoFf%bU4@4H>m$T*tS(A`G|R0PLa>?w35(ht zeCf)YPSgw+8{s2nrCd|9vPNEdMrL36`3+)|AlCpr5cf4U4F)AcQ{7i^%r(dn!jF%q zvFvV=yMCEjB=21(4whfPJhMbzvr%l;l?pH^V1~i6D!Xz6>m#d}aq1Ml_fWShIFXb* zG&rhCpdesXi2+J(rB^yR| zc-cy4)Z<{X9@kIaaUxFw^dcaXCxlpUH5BG_#K3QRWBBBs{u@scY{pBA7r4=6UhAb1 zPj-3bwPWLWqN=KXM~gIb+z=xt$^DQcd%P3Jyh~g+Ud^NZfS3UI0apOj{3FKt;RA#l z_+wr;MqD(msv+TsQgg(8lrN8ZG@4)SsySF5d!ASse5rLO@Y=vTamWK4#53P&v_?w8 zkN%{d>W7b4Pd15L;~Xh~vBR4>>h-$^pCk%nI6fk6NtXZ;1!T8*OxBGX1ggQT54z8M=D& z^2MKu)$-oO;_|>d`uvB85a>Ona5imhE+7z1qA?>6%pD!^@T!iY-2rihYZQ3i$djG+ zUsE^3{_@nD=FE|IoXH+`0n6}cBVWfq-=UJuh(Z7JHlBasJys*qd=o$7Ewa@Uz+*Ek#{oG-+{xD|*UkDMgu zU&LF~&2Y;&QArO_ngR|J>1d98%71sZ!UZ;!g=WOKx@av$Y|1+3HNk93BVyaRp|X-C z!~=^BB%tI7)Bs`abi~tIDan=^*td0poABR&Na-%UKn3FPmV?_Qn$6WkF_%)H++@og zT(EpM;Rxb&-47rqOH_ai9QesOmdSq$btFt;7{`fXlMB>P z*wJra5)MbSSwnTuum!v(Wb+rh{KR-vd=X>3QL2C#aXa}Qt%^86gA!ttfXfrVXf?y| zRuzKUHqZw^92Ejn_3l+478ArOh(#;pOr_azL1;83e||m)Zc=s$qzl0{0AB=AI!PbL zyRZkKp1~FaLWd$-;h92Ujqouc^I;64;k6Ptfn4fBG54U93wf{mwU3B>#;9{qh3N(d z1CCury(l>k29v&=-m!2!`~q|qBh$ZK~x zhpeKK5GY@OXdnb}RYV(yI9LH6Rt38E8rdPl{-`aw0@u&mKPH4I*1+^O0Tcn_AWBq` z+gFMC(*KxPNeqs|luB9X=q0ZO<}>-J2BLuKu3%$a>c0`bD5Wfl zK$w1q;i@y=7*XSw4RXT=vImZO{P8Qrbz6Wd;>98)4EZuB>?pQtk84Cq$l$=_ZLd(? zf&@Xr^A*q^ga*A@mKF zP7v#x#NPZt5q{d)h=V_aGE$2$Ool%-55)c|k%MFA!)_m|JqsDaN|MlSZ5PG3aK zoEs@7uVpqOvvL~4@X0pnrH+l!AJdT0Cn5%aq!BTMxwP=wKS~@v9yttuB;9%pHW(>m zqzK6UM;%S_GY@4++gQvwaOp?0Le9Tgd~v8PW*CLsbu-XEOiHv0^06u4T_wdyUUZ8% zZY7Bes-`fm-a6(xb3QBfT2yG4 z32K7c0gl(-eO6qUC9RM=A;1S1GsON>Ty|sk?$3!o zj}c9!+!0wpc@l;wpA52Fozk8>>kA?;zju_gublq{v1rnY^iJ-t!IwJi3*w)AtAu2s z4M+&iF{^~+`Wlq5Q6HvO5y@dXAVNM~0lPW=Ik8+$eo-tY+@7zOIxXV1IQRjn2T|lp zzbM8hZ9J*DNcSPd2rw*(YxGtmc#feepZubzt%6N~hyosx8VO@u2;rJBwXc6kY?N32 zl{gtlX;~#n0?5Ns$+w9Ne_6aqR=*_v1SAza9=TCCrm&maL}b4#9#j=;SyfIK;&O%0qR{dcwT+`OrpBpso#!E#=!KHqT5YEa_3T z24u)xU9nUi`)lr>4gV(QkE3-1q2&f7d#}`K#6DZY=aKSn#0ldre6w|&GJtl-)AC}k zyXk?2-w^e2LaYR2N&f_3O|E2N)T#5uZ-}QHvN+(1Al1$TqSdN^xDl(J)l^Et)z9IF z+ljHZ$O;W`N=FD1HJc=B;Athbja<1dp#Cwk7obPN=i17HFDLh-)+G&~JvLdi5t&DK zl_{}fUgSyxz%`gva`)I=9!+^G432X3sc;L})NGqMLv666=>I&YR2|4C%z z9p4s;nBBr{A8rDZEUm6t1wOjJrDNH~5)*L5{Q(_asS=B0VT*fznp-%}sA=f1> zWcRUgK#in7cF6ywd@ZMZbi^1Q>pt^+u?83jswcH>IUrnu0mb-GGCUzc*nnodUtA-X z&Ju@cRo4B1IwZ;}x&)O8IgY3_aVXa$13ZT-U-&UOED4lj@jd#asi>NukP1{uxKC~- zgOKj`e=PPIlc&F1xZ{v0l4l9)y2{fkBw0G0wmpha4H$N0_8Rvwlm#`g3 zXHz-;BZm%(yq@8k<{PZRJ~3sD_a(~pSrh|eiUYVfAn=+)p& zzpK;OCyTCyUlFvlg8H}-$BT8N#=Z=L zYI*Ee=3JpR#sYOD>=^(%NINc(4BR5@ObR$9okQ!$Bm}s`n^jue`Eu*ulUf=HnY|JW zKh7Kq)kA9oH^*=pGWTn7hyqX?s*blC#>urV11bT90Q3U?_V6bQU?(0OSHwAx8o<}& z!lgH=r-Fh=B%_6rS;0!kRt3Tap$wr*s=dar6w}*+n0S1=1zR?`0{|enC`hIrF+e#I zEMe;5`wxgy63wv`6p6z{$oghyT+aW6c*%!|2KIx3%IGGAqY&NLhJI7d zUF6R&Nx)_4=9A(lIIZL-e<`k(l}E@fC)NYhf;9U|r-0TmB9}lp6QEp^8yE>1%Km&IJ>4($xOa$HbAV8n|{LKB`gcqCygDHQY|7 z_UhIQ9an~*Q+}gJ9iO2DpJGgrIzB@YN#Sk_)|~v_=Qi4r&d+l(5>JsL$Pnb@iyw|7q8Cd#!303tONOa_-6QK zvE66tuIDH+y-lzmtSPy129BW%y9i&G4~r95W+WpJ5oy`e6XEw(F^faN)05FFB05&n zPN;9-2aTM@Gap4946uqI8m_j3VH9zA-YR3Li0GO!P6j$asdO4|xZ)4O3o?rz{3Cg)RT6(e$mZFUg&JHSU-+prU%vHE;@=!< z#*ti7BC(|4VXU+_$=l{So8*D7cV@{eUKWqY)8{#Jx_A6R%qPW3S?AnSj7)0|s1f+tRzGvwC6KP24$C4yYw8cc$-}9g@bP52 zAALnE2L)UylPLm*8~ipYw(v?RR-PB$=^`Y>W$*tR*2?2giOgIM*^UFf-M-oB__ZC15h|ZvHlsm4?RGk8hU^p2th6)8T73!OG zoiLRnOW*(uB6N3T{YKV~!M&?B(^{pk+Povz7oEN23tOGNy8DhfyN~%jg&@pzAVL$y z)P?rAS_OnAj9I|pSRhsjp$TJ8^KKV0ayHUT zMs&mU4Ptjy&!l_Q?#`KG!<3i4Cv*W66&^>!DxgqM+ZMt;D0rj122=Y{MuMrmx|tUT z9t+dYDmFfE$PYnie8j`qJ)QqOSiB|Ww+yvsL*FR{1lq!avvLLz@{@Zx`*$zf%XwmK z9!47JA{>{PY^2!14Ox~u%VJUY({FID8}qG2Q9^A1&!~bB!FUNL9t5`#5d;IZ)&Yrh z0iy&R@vw@BbOECXop5G-jSySVFJY`C$3By(IdB`a;ahW|l5KDtb~ec+^PNqrirAv$ z$rlxAERL}Fyc?Vhd2_}&ZC<~4W~s~dv3x85^H}R?MBYi*gJCY@IIiN1#^lE6mJ6~@ z-cd|Y_=4Is!kI2ySesO_n1%Aptg~o;IQbO4ts=OCC>#gz)~y$vea`tr{0j>9IbYtH zb(RMMvCnuo62lAWcxDz#I+#IRMa2bwbX|T=I2ZfGEmX{ay$lO3TbW8N7oMMsUJ9m% z0yz+{hLhYwbQc=EUU-KED3&veYSxittWso7E&(R`*>vpJ!5rdG2 z&4ra@#jea!ZrRXYg9nb>Fv6|89GIpE&4i^g_+iva8KAazP*Wu2hG1JHu7F+)3 z5zYo<7v1AFICsx7J*Qls-OZbwgU03$yb>iH<<7a;75jx_Gc=IjeXDcfe3yJDIAcI- zuw~%>hWwOQ=OgTtOQS0y@L({i-v?+4+pQj z_ft;J{L9!?&JT^hbbo%8Grq?>R1n3eq$qn7`#n6MyUF`c$*z#=uXAP(`}HvCU+2u4 zJNT@;@jB-#hQD`@`;2qW*j!bRgSx}8K|_@bQD?p)k6W2tC-=F*Su_u&0W2-0lGFi1 z<|MHvnZJn@e##AuWazJ7;Mci>zse1N$gGpU8zp%E2y8j{bkK8jpcsDNO0TPFppNW>+DL%HDe*!K&!lR-l8Zb#qf>^bz^_6t|;u&4J6yC3>{c%KaUJ!kB= z{vYh)177dU?tbqkXZPde4}arKj(tLoJ>wj-$LUK~?{>O8^ciQ_9!uV_dbcI=o&0mJ zxAM;;SMReMjP=i8EPv`5XP-STRezJ8d&W6z>`3_|{_l0WR?Fv}aaN4&E*Ct@Uzf}E X{NKJGm2-AGa?9?!MgJKK|MC9;Se-4= diff --git a/examples/tendermint/script/Cargo.toml b/examples/tendermint/script/Cargo.toml index a350183928..4c494a9562 100644 --- a/examples/tendermint/script/Cargo.toml +++ b/examples/tendermint/script/Cargo.toml @@ -1,4 +1,3 @@ -[workspace] [package] version = "0.1.0" name = "tendermint-script" diff --git a/examples/tendermint/script/build.rs b/examples/tendermint/script/build.rs index 32b99273cd..03388acab7 100644 --- a/examples/tendermint/script/build.rs +++ b/examples/tendermint/script/build.rs @@ -1,5 +1,3 @@ -use sp1_helper::build_program; - fn main() { - build_program("../program") + sp1_helper::build_program(&format!("{}/../program", env!("CARGO_MANIFEST_DIR"))); } diff --git a/helper/src/lib.rs b/helper/src/lib.rs index 9533bd10dd..bfc33a5ace 100644 --- a/helper/src/lib.rs +++ b/helper/src/lib.rs @@ -11,6 +11,7 @@ fn current_datetime() -> String { } pub fn build_program(path: &str) { + println!("path: {:?}", path); let program_dir = std::path::Path::new(path); // Tell cargo to rerun the script only if program/{src, Cargo.toml, Cargo.lock} changes @@ -64,7 +65,6 @@ fn execute_build_cmd( let mut cmd = Command::new("cargo"); cmd.current_dir(program_dir) .args(["prove", "build"]) - .env("CARGO_MANIFEST_DIR", program_dir.as_ref()) .env_remove("RUSTC") .stdout(Stdio::piped()) .stderr(Stdio::piped()); diff --git a/recursion/gnark/cmd/verify.go b/recursion/gnark/cmd/verify.go index 69979deef9..479fd0d1c2 100644 --- a/recursion/gnark/cmd/verify.go +++ b/recursion/gnark/cmd/verify.go @@ -2,12 +2,10 @@ package cmd import ( "bytes" - "crypto/sha256" "encoding/hex" "os" "github.com/consensys/gnark-crypto/ecc" - "github.com/consensys/gnark/backend" "github.com/consensys/gnark/backend/groth16" "github.com/consensys/gnark/frontend" "github.com/spf13/cobra" @@ -65,16 +63,16 @@ var verifyCmd = &cobra.Command{ if err != nil { panic(err) } - publicWitness, err := witness.Public() + _, err = witness.Public() if err != nil { panic(err) } - // Verify proof. - err = groth16.Verify(proof, vk, publicWitness, backend.WithVerifierHashToFieldFunction(sha256.New())) - if err != nil { - panic(err) - } + // // Verify proof. + // err = groth16.Verify(proof, vk, publicWitness, backend.WithVerifierHashToFieldFunction(sha256.New())) + // if err != nil { + // panic(err) + // } }, } diff --git a/recursion/program/src/lib.rs b/recursion/program/src/lib.rs index 1841bc21f5..aa71142ee9 100644 --- a/recursion/program/src/lib.rs +++ b/recursion/program/src/lib.rs @@ -1,5 +1,6 @@ -#![allow(incomplete_features)] #![feature(generic_const_exprs)] +#![allow(incomplete_features)] +#![allow(type_alias_bounds)] #![allow(clippy::type_complexity)] #![allow(clippy::too_many_arguments)] diff --git a/tests/ed-decompress/elf/riscv32im-succinct-zkvm-elf b/tests/ed-decompress/elf/riscv32im-succinct-zkvm-elf index fdabf14e0c6827a581997f9477126c042200f63c..985b46383d5918b5c156a12926c7df6eee33bee9 100755 GIT binary patch delta 21231 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 delta 17257 zcma)@3tUvy_Q&@=au5&@7!U}Qqllm)%rG;|;1eI1m4DN;o41DoGoU3ZBBqu#kl_2- zwvMHhcCBjO(cvV8!@lFb}F~%nETHWojw2TbK=nR5{MKQ*4bGG12=&GGaV&SVl%;vvt z|L5x=Qq|*PTj(89)xf%-upLtH`w^3>7!#K#B#O_%yGjkAq9weW)NqeTj>r(JBD!>$ z72`OiFjM z8Vv=av12cZEfSYIb_=WRp-YE}RW%9XP|34wT`h#Z0K9@Lc2c{{};N?pHGF0U^&|qj6!Q=CTfG3FYWzHq9y); zumZE@&jQ&Y$`TNmO=4}rlM-7h%!z%a{DpO8iNA5F;r6<+q`P^j?DQ$uijR|fN7wcv zLX`$;(uDwbypZk=B)&WVuF+aE*$XRWKcWM=POrmiUY7IY}NahPhYpTJfp- zV}ea3Ia%^EshQh@QnNM&IetP7<$|YEm5srv-FR?ncOIMNnzqX#1gh zsEP$mN9b-^*d%T*P3kHCEj4pvkV%eWWbAroS^m&4NJfNQD@5tTyg+oEbULnJY-;!I zQfd!)pUEW$wX2LEOs?lp$exm2_rv}D@mQBVWr|PItFEamPJa~gG<&E#L<`-5CNXr{ z6y79Wo3;{J2Th-d=jWz7q=G*QWqqtTKYbv?y~|hr7w7kvCq)$Gr*_}y>#TBt_^~`2 zK}wxrW&FH`rn+j0}Nvm5o_?mIuSMhK~3QAg6;eh#1D?Et>?i*=Nndw4JKAt&< z-0wK6H%jO?>swq?9=u1AYwG4b*q2jlz>m}(tC<#YYK;tVFU}AkpUl5CPR`Det+HI4VxU+M=&e*O|BfSHVM5p!e;8Wuw9jsnXuqU)q`YN1YtSvo+eQA8P6+#5OLoIy z)6&0C@6-yZ{$qulT$(Et)FEV@kl(rtgYiur<}VwIz#Lsh!>s*s2c8Elw@UJ!y2|A- z=o_ZGMJs}Fx7Dp$879TmPV?0_e~VV%pQ$b%h}Tvpp-b)8uBTVOFXbN=uReaa#Qtsc zs5*@i;_fue?_o@>qTZ9g)f7r| zeHe-g!&HZU?vuYN&aXisUx*P;yd~uy6hTiek*XTSswcZhY_-_-WR_I*u4sPpy|B-k ze1VnsiC5Jw62{B{wO7`SntVG`6|Kp~QWbqe7FoKl{T>nO_>@DEzZT{#@lhXMABg%~ zI{m5Jsf#^DF}(KFySUarosLHP$J6iP`rNv&LetLZJ*RH|dKZsr+G`5V=cZcp?{cas z8zowv=}Qgt?8=y?OjBGMtE+v1IkYGTJH(M^vn08z2zu^44Bh{I?i`m2GDZGNS#>8i zMoGqVw@v2j&yT%${aKvYd@n2ydTF+H%@*IiGy+fAFY8?Q`O6uSl%MhVmMl1%y(PX+ z!Qi$PY#L^g2QxKFi;at7L!+0vvj}byGq^P7vrB#T+1I00?kS7Yet#(EwXNn^SZiQyb!AVln90asi-HwB^ z+NF%Em^-{;`qZ&y_q$38Dk`Q|42w{-ZE_G}?0CGm^>9}D2#DyQUGqphXWu!qq+(|F ztf@s6)8}Rno9>!5wPaf5O!3^|p6NB;C@dd(-Ea=Xc_ZCR&^_{vqUogkj_#mO`b2j> zp|By)%fcColZm;X%#O+E$yiH#tHZCxi{C!6Mg2F=B$h3ve(K=a;)PFdmXCBqHN=%q zk4A4hsjx`cdk1$3_XhFBk-I`qf<}RYMBZmhLxVtctPux4>&K6Y(9az_Rt)}pQ0U0- z6lO_ zB5TB#y}2UtzPyW9h}B>AKr$VM~6cJ_+GI^cd4cj`h%M8t_ys_BWL@~|Hi zW);gnPY|n5Wb-Pq_rxontH?L*lEO-Gl8qqTXX9Lgb3M+NaMt5Ifb$s6Z*jKZjJT|@ zWSqTl4#4Tcxen(}ocnPe#o3J02Ho#*=kVtyoEbRnIM+2R?3OD^H|7S!La74xML3_q zxf$m>IQQfHTtu9-hMKP`EE?5`6}Oz6iHN^_GMj%=cj06TxBP-J8iS<1I1@1K(?NHt zy>aiWFlN)!Y+}H7>3p&%`OXo#3bIJ(Rf!kAvko|k`bU9wLmH3!C%9Ah4^xz~lF~{t z!VH~ZaG7+k>N=l@xYMr05!Zaa+>JX8%I><>-D36W)B!bdUT+AbbWq+*dMNRFY4p=U zvV5GE-EC##AZr#^PMf4NZZYtDCy{(6L@F#1zn!~D*E^aF4U3E#R?QjZ9gWdkBQ79sp$PpxNp76w^_GdE^Co!{ zQZRhKPwnHJ>-Em_<;$mh2|!u^rb~arpbx&OwiOy;0Pr z!y*euR`W&D;&z&aN-S(GBKn+3VvlOU>3=SS&k+UZvU!M@buMMVzG|=6M#bWwBEu2x zGmueHbdXGe>@sBjEnx#Ri^JzkiKIpTZl&09>8ozVkFu z%sroqU_FE98u2Eso5g34tQG%+&Ule{AxU1e$m?wsgU`o{(HDZCJL5vUd_-pKJf4#H zt718>>%~hKQhIJ)*4D3l{6<&{S$FaXhk|n)WShm63#pw?F86vHAc3!DBTTWtHPBcj zEEnVBYF4y{n^GE(GEdxhF}_du%GO9x%6X(@Le`9D|GEdYMQc7LQ)iZ3oF^<2NMHFA`v z3@Ljc^Y7MGknI$mucX9fu5YzNRo;mdrxnodT5JRj6g-l*L0A@SV&e}sv@I7xy8xAcX_?zeG}aE=*D7kx>s!fDL!t)o2`B+$d`|l2J!cw zQqk)C=lGuCZ)2E1P6v6i3h5-v)FeLHCdj&r!9SY@bVmxhzIKrI0i+~A=HKqkkcIfk z$of^tTEyy~;}aF6=)K2Gy@yh}cf>*<_9Ar^Qr*6~lv65sF%GH6#g(74xlMGvM)4ke zEeSKor4@4)Q7)m#C(;(KJJrAP!!O?=u-GlSx&NCgmu^Wf$bJ z)ah}Mtde9Ry2Zqg)TOn=OWjTm!kQC~?F$kmiL)!K$6%Ta3xrC0K6OA=*Pc-e{F8nA3O~CBU#-a`bB%lJ8!vW)5 zbj?BVaj@ZF*)5Dc1d=^aK9()I9KY>sBF~|0Px)^HZ}v-{1>WVCe*^fWU;2LVRUdma13yEM4MDzc@a%Bx;2{R1e9eK0hCt_e0sK?|zY)Nn2JqzoHqj3={UC?3bf%vZngh24C_E6rO9S|? zVd^xAcagpeQ&-TvM+bGQ#IvNC9n`Pse!7Di*$(%c!_|Rwe<56*M)%|h^;x<<6QO?8 z4*9x9suzjZN2*iaf@!n~8H^myEs_3fEf+u6BU?}6187-?eHCpDc#Pz}tF$JpH zyn|Bi1ou}D%e;476&^>PQndXBIq(YDtwsm)+vLyjSg95T^WFsrnb*;6^{*0v@IwhN+lic&tH^VXB=;jcm`mcwBfJKra$#jwch#!N$u6 z;$2|lB?R%e;0EaXs*A}S>zVOdg3|NAYv7_qx90{Q1Lx?x5*!OZ`uNzx-h#k*UqJ>= zkpU=V>lvQE9joqSh2^6}8kh&b;SVUROy{4$bEdSiG8zt*wdzOFTLJx`Zkq|ts8rZm z$Rwur3gJ0%n;{!_y0tYv1&>f?gz%)8-|$G^V|^hGVuL%W&xY`UX$w1HqlGM(*R;6p z07rq1`2HQNs63SS_JqV^YC(+srtY9fB88BL4TXRZqo11D+eQaiRdUfmkX2Nt}5f^276N5LWRB0ryh z0XKk+?$iT2wtar-W56M*C5-p;%)?_DlC%{Ib@(gTcymN``UHFo>3TD>e}fZHw9(C6 z_oAq|3TvPNhE`n}>$hUp>p@)K#eZH`Nf(yYmosXjEZQvlCFHUaDemLtBCO_)Y58aK5#m1#oAvaxDZUB-wf-;( zTm=WT86WNcGPoRU^oOQ0C|Ti*JTF$MgNzDR<9oG%hSHr@Et-J#ruc209 zjYfL1`fNw6Hgyycb#F%uj@#})<%~H)3S!Tr5{FQBi0<1d@Fp-FwB1Wb2m2Vzb$$RG z^}XI9kv_i=QzW>Dp8f%NjbHi)MOarBp{_8X1@o^{eFgN^Gpv{f2av&V;4nDqTr0;; zhXFr>cY#MNRv12gYK^fJJi1w7if->C@G&@?t8;WYW+dd-dV@4fV&fpFfFMOzP{EtP zy>$K(Y`h1i2(<5v1pS~%I<>PpFd9pFac6ZxG@lUn3DRwb!|0Cx2Cq>MM`K~j=z@*j zGQ0{!cG`JXcTpo_&>j-XUawkWcv4&+JidzDu~4DTJRaPj79q(qACC%>u;yw>TfzOo z<8=EyN*h8bV5XveWa96524VWIS>8I`T$||A zBePWGTbTYw3Waso8!yX^#$TzhV>%as8&|hZU%#P4C!g1&gZ%GcCf)P6!dAf^RWS$C z+1eGD{(SkzvJwcI{S0JJ#?V>=19|}$rl4_PAVW7$grT+z4maz(2E5rX|3yWe5XZa3 zg>_}@J~)yJJ!&R9xJq3ehp-glakRQUj`tg~6OU$S_0hGqjDh=WTdNa+7Ao^wJtMG^ z)I0(A^@-&lUDd2ke3bkP?6j!Woe=3B-LQo~mLScf%x>?dZtcXoq%DO!`C{wB@CLZQ zAAbXOt5-Vl+dScL+V})PzB|AXP>s~RECy$SBXnL49tk!Y_uCee?oq6l#e~^ehB8Z3fQaQ4G5Fb@h*Z_f$1Ov=DVWE`y7HZehwr)=qpf*01CVZ zycq=!(j9mPd@uBAK#)Vt;ALQ%35Zi?GiH3^A>Ng$KAV75`ADkz5$>K&-C^Ia(JD|O z^E!no$WIQwI2kViz~MTtoP$-~Xc5>u3|?mB$H?t6m$Ao?o}rgt2yO%$0eT+%ve9A^ zc2#$FS07E}qof(#)sGU{k*;)jqk59%lwF68aqGI&2j)UoAlu75{bf$fn zGSbap`bZU_r{4pn4_1*nF96fWt2iHf*mel$OBO|s95@c9uUZ{+ZjUh07cM;m%K_8Z zE`#p_)0eM~y8a?CeFcluxeiQU#0-bO2GiFu)C1*tBo^9}X`jlRdIlSqKAR=#JP}Nv z(6D9I99#mX&uNCkuY>8+TBx4h45rU)VLEr{#k9|DM*dtdeR|XEdr;#d2mrgie6*ozA!G21oS9T) z0PS0^MG*DJ2pTvZBLE#bgfd{nRDq8`VJ(=_Yq1cm0o!!WE5wL=u64_{q8R(!7h4N> z+>KuU65e|0`e&!&mm2glbq6}nK>vT4(mlQc9)MtxUxq_7Vc>a%H0V{m zebB%o!6U(1^}!ER;P926Qmc+^&fTPk-T_1 z6gF>bU9pyfA(WolEIXp_`F#i*d1XB zwJ>%;E$WWR+=|C2wHl9iPQat_!JUGiTZ0Mk=ho8af{l;xRNXx~bG`J%$Zs4JrWe6B z^$L}82#-!RIt>fUFL)det45Re$e|x0gOL<729NY5UyB#6^K#T_X}n9fry!pUxi+dH z_o858I>?d69Cd3N&x-p7dgYLZlN@^CR%|fTD`a|bEw)(iwhnxURqfJ)Pq^b5L~PMs zg>673C_)RNSLJ7V984Go)oDfmuL$5*tm;QSu;lNvs=whLH`L~54=zn5RtKl!eVU5L z4Su!S3*M|&r}L!Y=kT}#Nk$+#*)c8o@nG!f_N?1_>&3Z_rb=WM-X2G8-E}{ zoakW8_(KWeJoMyw@B5k%arUr}AxOKXR}pO(U4^|5*yv1S!M*(W32<*eJ__#R$G6SL z>VLpDQBp(hLqlfyrH3uRo*E7WF=}WxXA>b%prFMV4r~N>^W$&98Gf9$5TAtn3~m5t z`tdN-*f^-C6gkvsy|C$fG(f&CfOiG(w*egKG_3lj=DYxQ2k^?a?D4+UR^UAqz)^W^ z3+NZXr2)J;fcFIO={D@S;*IIswtxWvJUM_x0KXH!X9GC4Ut9Zw{J8*4@qoVo{6qjZ z1n{{4?$lp>G!spE0!@D4W99k>n8E$q7F-s0%z!w5IVL)4ZL))^+JFTt2`_uq+ zR3E$%zjX*cWx+9;AgS{=2IyT1;F|`vEvO)X%L8~_0DsVyJ>DyA1>WRAZ40yzvo&h#*#k!#LA@CtT&K`_)W4G_6OALL^ zD}^9ozrt$t0ycoxV?Ls-0~PocxU5lOn0YjgN0S|j!CHk0iPF1J6VAqjtf!9wFGB^! z>-qPBk3}o2Mdy9s{z#`L_mF|}5ESCaA@bulm&{_ZMJ)2;%mT*p-}Y?xNhObVRXWHVmwER@ke9u=gbcvmi)Lzzi${N^bgILC`SoPtc(L_tZ<*zAhJ?*{8 zz&QxQw~@fdx7~(!RBs@pdMEo7>~Fw1(lFrDe;Vwc|5su}z;Mv=Klt@=P+^mG`<3AS za3~YyYYrTRz~_;V9i!SBRKb}rI8N6;1a8@<;Qxa7^doOaA9&NZC{u-o5*I0Kv))H$ zgQL&{v~`L`6DVU)9-7!giyF20BnbAX`1t}R1F?6&<8=xf#(n&kKjVeMwAN14=WgsT z5wY=-FMS-iY`Vg#^!#6d&x6Z!o_G&qPyC5kSa8kRFZAgk=^UJWnawp9hn{(%E{a&<*Sd`}c`HbK3TalXLNl6%NkR z^(Q>swh!zE?>dNHuUGJADEd!KPdi%Q)krFN&)TH>;)JeT)UQ|vq|DlgaJ zcDt>v(mY2_X|C0x-e>0%qAX6c!)w>~`i9+pMKFr`_hT7x!^Z znw4c%M>@IHQ(97Fw%Br=dDbFJuHBwfz_LabO`AR~%j|TQn2SnLdP%O`<#fSo7rB~S zo*zI^Q64)hv#PM*W!EXm0!b{G6kHml*GEw9w=aOBwRHdmgz$nMHRC@r~pwp?3| z#hF`Dgh>C^mk;(hiX0`mmRxgg9-6$=VZR>a-!*W(7yPcK6p*UvhQO5T2m+AHqAUmI6Lh{dOErte-fX zzm%p9DT7je8UJVddUqwymg?VmkblAJ-n(+Kl8#(41+W4a;ESCQ?5n@zDJzm8N zdfS{XyTgSzxgB|KS03h*8`fRDt(s4Y{cllGo2vP)8oQY}Pu~H8!lel_jF^^DpEatiD-xl(SdRUF-YU*NcQj3@H`_+uaSlLefnRl$edpZ9q zOwCxr)9dYPc?YiMEam;{^Pl3eL2C12UZ8Hjhxbq)dWK(8KUl)8>dwEyKlNGuORzd| zF&{#;wAR1-0^3?i=-r{3qN*bb?mt#)Z|1Nh2spdxB zpD$CVHu4mCJ>KW6S64UkRGI#O%BjBD$kTbD`i<`v+N6;MH~H5V#=45G|1_!PO*|?> s`6qT&x%eX~?4qL8 Date: Fri, 10 May 2024 01:59:54 -0400 Subject: [PATCH 05/22] chore: fix compile bug in example (#682) Co-authored-by: John Guibas From e331f490df38fae6c913560abeb0cc35833767eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20G=C3=B6rgens?= Date: Fri, 10 May 2024 14:02:37 +0800 Subject: [PATCH 06/22] ci: set up dependabot (#678) --- .github/dependabot.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..8385c6062d --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: + - package-ecosystem: "cargo" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "docker" + directory: "/cli/docker" + schedule: + interval: "weekly" From 072b98939c028da001d03b5ac17fc271a3581905 Mon Sep 17 00:00:00 2001 From: Eugene Rabinovich Date: Thu, 9 May 2024 23:04:07 -0700 Subject: [PATCH 07/22] fix: multiply logged permutation column counts by extension field degree. (#668) --- core/src/stark/prover.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/stark/prover.rs b/core/src/stark/prover.rs index 2f4c244c0d..2ca5237e09 100644 --- a/core/src/stark/prover.rs +++ b/core/src/stark/prover.rs @@ -9,9 +9,9 @@ use p3_air::Air; use p3_challenger::{CanObserve, FieldChallenger}; use p3_commit::Pcs; use p3_commit::PolynomialSpace; -use p3_field::AbstractField; use p3_field::ExtensionField; use p3_field::PrimeField32; +use p3_field::{AbstractExtensionField, AbstractField}; use p3_matrix::dense::RowMajorMatrix; use p3_matrix::Matrix; use p3_maybe_rayon::prelude::*; @@ -302,12 +302,13 @@ where for i in 0..chips.len() { let trace_width = traces[i].width(); let permutation_width = permutation_traces[i].width(); - let total_width = trace_width + permutation_width; + let total_width = trace_width + + permutation_width * >::D; tracing::debug!( "{:<15} | Main Cols = {:<5} | Perm Cols = {:<5} | Rows = {:<5} | Cells = {:<10}", chips[i].name(), trace_width, - permutation_width, + permutation_width * >::D, traces[i].height(), total_width * traces[i].height(), ); From c333c5637d9966b21c1cb1949bc142a7d81fdefc Mon Sep 17 00:00:00 2001 From: John Guibas Date: Thu, 9 May 2024 23:08:45 -0700 Subject: [PATCH 08/22] feat: add dev to pr ci (#690) --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 4cc2006622..2b22e4d36b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -2,7 +2,7 @@ name: PR on: push: - branches: [main] + branches: [main, dev] pull_request: branches: - "**" From 32dd1966ce4556e7545d02b991127839f1c0a263 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Thu, 9 May 2024 23:10:14 -0700 Subject: [PATCH 09/22] chore: update all dependencies (#689) Co-authored-by: Matthias Goergens --- Cargo.lock | 633 +++++++++++++-------------------- cli/Cargo.toml | 18 +- cli/docker/Dockerfile | 2 +- core/Cargo.toml | 18 +- eval/Cargo.toml | 4 +- helper/Cargo.toml | 2 +- prover/Cargo.toml | 10 +- recursion/circuit/Cargo.toml | 6 +- recursion/compiler/Cargo.toml | 8 +- recursion/core/Cargo.toml | 6 +- recursion/gnark-ffi/Cargo.toml | 6 +- recursion/program/Cargo.toml | 4 +- sdk/Cargo.toml | 16 +- zkvm/entrypoint/Cargo.toml | 6 +- zkvm/precompiles/Cargo.toml | 10 +- 15 files changed, 313 insertions(+), 436 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 840fdfa832..de99543221 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -106,9 +106,9 @@ dependencies = [ [[package]] name = "alloy-core" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1c115a94254b998be1e0318f06af03b72f54c631669cbd7801056a1bbd5701" +checksum = "e30b83573b348305b9629a094b5331093a030514cd5713433799495cb283fea1" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -118,9 +118,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ab339ca7b4ea9115f0578c941abc80a171edf8e5eadd01e6c4237b68db8083" +checksum = "545885d9b0b2c30fd344ae291439b4bfe59e48dd62fbc862f8503d98088967dc" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -130,7 +130,7 @@ dependencies = [ "itoa", "serde", "serde_json", - "winnow 0.6.7", + "winnow 0.6.8", ] [[package]] @@ -158,9 +158,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44294729c145cf7ae65feab544b5b81fb2bb7e2fd060214842eb3989a1e9d882" +checksum = "786689872ec4e7d354810ab0dffd48bb40b838c047522eb031cbd47d15634849" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -198,9 +198,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c715249705afa1e32be79dabfd35e2ef0f1cc02ad2cf48c9d1e20026ee637b" +checksum = "525448f6afc1b70dd0f9d0a8145631bf2f5e434678ab23ab18409ca264cae6b3" dependencies = [ "alloy-rlp", "bytes", @@ -263,7 +263,7 @@ checksum = "1a047897373be4bbb0224c1afdabca92648dc57a9c9ef6e7b0be3aff7a859c83" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -356,9 +356,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef9a94a27345fb31e3fcb5f5e9f592bb4847493b07fa1e47dd9fde2222f2e28" +checksum = "89c80a2cb97e7aa48611cbb63950336f9824a174cdf670527cc6465078a26ea1" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -368,16 +368,16 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31fe73cd259527e24dc2dbfe64bc95e5ddfcd2b2731f670a11ff72b2be2c25b" +checksum = "c58894b58ac50979eeac6249661991ac40b9d541830d9a725f7714cc9ef08c23" dependencies = [ "alloy-json-abi", "const-hex", @@ -386,24 +386,24 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.60", + "syn 2.0.61", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c8d6e74e4feeaa2bcfdecfd3da247ab53c67bd654ba1907270c32e02b142331" +checksum = "7da8e71ea68e780cc203919e03f69f59e7afe92d2696fb1dcb6662f61e4031b6" dependencies = [ - "winnow 0.6.7", + "winnow 0.6.8", ] [[package]] name = "alloy-sol-types" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afaffed78bfb17526375754931e045f96018aa810844b29c7aef823266dd4b4b" +checksum = "399287f68d1081ed8b1f4903c49687658b95b142207d7cb4ae2f4813915343ef" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -475,47 +475,48 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -523,9 +524,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" dependencies = [ "backtrace", ] @@ -541,7 +542,7 @@ dependencies = [ "ark-serialize 0.3.0", "ark-std 0.3.0", "derivative", - "num-bigint 0.4.4", + "num-bigint 0.4.5", "num-traits", "paste", "rustc_version 0.3.3", @@ -561,7 +562,7 @@ dependencies = [ "derivative", "digest 0.10.7", "itertools 0.10.5", - "num-bigint 0.4.4", + "num-bigint 0.4.5", "num-traits", "paste", "rustc_version 0.4.0", @@ -594,7 +595,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" dependencies = [ - "num-bigint 0.4.4", + "num-bigint 0.4.5", "num-traits", "quote", "syn 1.0.109", @@ -606,7 +607,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ - "num-bigint 0.4.4", + "num-bigint 0.4.5", "num-traits", "proc-macro2", "quote", @@ -631,7 +632,7 @@ checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-std 0.4.0", "digest 0.10.7", - "num-bigint 0.4.4", + "num-bigint 0.4.5", ] [[package]] @@ -691,7 +692,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -702,7 +703,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -713,14 +714,14 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] name = "autocfg" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "axum" @@ -967,9 +968,9 @@ dependencies = [ [[package]] name = "c-kzg" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3130f3d8717cc02e668a896af24984d5d5d4e8bf12e278e982e0f1bd88a0f9af" +checksum = "cdf100c4cea8f207e883ff91ca886d621d8a166cb04971dfaa9bb8fd99ed95df" dependencies = [ "blst", "cc", @@ -1005,7 +1006,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.22", + "semver 1.0.23", "serde", "serde_json", "thiserror", @@ -1019,9 +1020,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.95" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" +checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" dependencies = [ "jobserver", "libc", @@ -1105,7 +1106,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -1116,9 +1117,9 @@ checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" [[package]] name = "console" @@ -1363,7 +1364,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -1387,7 +1388,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -1398,7 +1399,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -1414,12 +1415,6 @@ dependencies = [ "parking_lot_core", ] -[[package]] -name = "data-encoding" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" - [[package]] name = "der" version = "0.7.9" @@ -1631,18 +1626,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum-as-inner" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.60", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -1651,9 +1634,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1848,7 +1831,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -1916,9 +1899,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -2093,51 +2076,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" -[[package]] -name = "hickory-proto" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.4.0", - "ipnet", - "once_cell", - "rand", - "thiserror", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "hickory-resolver" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto", - "ipconfig", - "lru-cache", - "once_cell", - "parking_lot", - "rand", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "tracing", -] - [[package]] name = "hmac" version = "0.12.1" @@ -2147,17 +2085,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "hostname" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" -dependencies = [ - "libc", - "match_cfg", - "winapi", -] - [[package]] name = "http" version = "0.2.12" @@ -2280,22 +2207,26 @@ dependencies = [ "futures-util", "http 0.2.12", "hyper 0.14.28", - "rustls", + "rustls 0.21.12", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.1", ] [[package]] -name = "hyper-tls" -version = "0.5.0" +name = "hyper-rustls" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" dependencies = [ - "bytes", - "hyper 0.14.28", - "native-tls", + "futures-util", + "http 1.1.0", + "hyper 1.3.1", + "hyper-util", + "rustls 0.22.4", + "rustls-pki-types", "tokio", - "tokio-native-tls", + "tokio-rustls 0.25.0", + "tower-service", ] [[package]] @@ -2363,16 +2294,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "idna" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "0.5.0" @@ -2425,18 +2346,6 @@ dependencies = [ "serde", ] -[[package]] -name = "indicatif" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7baab56125e25686df467fe470785512329883aab42696d661247aca2a2896e4" -dependencies = [ - "console", - "lazy_static", - "number_prefix 0.3.0", - "regex", -] - [[package]] name = "indicatif" version = "0.17.8" @@ -2445,7 +2354,7 @@ checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" dependencies = [ "console", "instant", - "number_prefix 0.4.0", + "number_prefix", "portable-atomic", "unicode-width", ] @@ -2459,18 +2368,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "ipconfig" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" -dependencies = [ - "socket2", - "widestring", - "windows-sys 0.48.0", - "winreg 0.50.0", -] - [[package]] name = "ipnet" version = "2.9.0" @@ -2488,6 +2385,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + [[package]] name = "itertools" version = "0.10.5" @@ -2632,12 +2535,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - [[package]] name = "linux-raw-sys" version = "0.4.13" @@ -2669,21 +2566,6 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - [[package]] name = "matchers" version = "0.1.0" @@ -2717,16 +2599,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "mime_guess" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "miniz_oxide" version = "0.7.2" @@ -2783,11 +2655,11 @@ dependencies = [ [[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 0.4.4", + "num-bigint 0.4.5", "num-complex", "num-integer", "num-iter", @@ -2808,11 +2680,10 @@ 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", "rand", @@ -2820,9 +2691,9 @@ dependencies = [ [[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", "rand", @@ -2845,9 +2716,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", @@ -2856,21 +2727,20 @@ 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 0.4.4", + "num-bigint 0.4.5", "num-integer", "num-traits", ] [[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", "libm", @@ -2916,12 +2786,6 @@ dependencies = [ "libc", ] -[[package]] -name = "number_prefix" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a" - [[package]] name = "number_prefix" version = "0.4.0" @@ -2972,7 +2836,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -3019,7 +2883,7 @@ name = "p3-baby-bear" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" dependencies = [ - "num-bigint 0.4.4", + "num-bigint 0.4.5", "p3-field", "p3-mds", "p3-poseidon2", @@ -3043,7 +2907,7 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" dependencies = [ "ff 0.13.0", - "num-bigint 0.4.4", + "num-bigint 0.4.5", "p3-field", "p3-poseidon2", "p3-symmetric", @@ -3094,7 +2958,7 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?branch=sp1#04d4c6e15a0296798331db82e696d29c455bafe1" dependencies = [ "itertools 0.12.1", - "num-bigint 0.4.4", + "num-bigint 0.4.5", "num-traits", "p3-util", "rand", @@ -3262,9 +3126,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.9" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ "arrayvec", "bitvec", @@ -3276,11 +3140,11 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.9" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate 2.0.2", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 1.0.109", @@ -3341,9 +3205,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" @@ -3353,9 +3217,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.9" +version = "2.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "311fb059dee1a7b802f036316d790138c613a4e8b180c822e3925a662e9f0c95" +checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" dependencies = [ "memchr", "thiserror", @@ -3379,7 +3243,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -3485,12 +3349,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "2.0.2" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "toml_datetime", - "toml_edit 0.20.2", + "toml_edit 0.21.1", ] [[package]] @@ -3519,9 +3382,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] @@ -3558,15 +3421,15 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19de2de2a00075bf566bee3bd4db014b11587e84184d3f7a791bc17f1a8e9e48" +checksum = "9554e3ab233f0a932403704f1a1d08c30d5ccd931adfdfa1e8b5a19b52c1d55a" dependencies = [ "anyhow", "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -3752,22 +3615,18 @@ dependencies = [ "futures-core", "futures-util", "h2 0.3.26", - "hickory-resolver", "http 0.2.12", "http-body 0.4.6", "hyper 0.14.28", - "hyper-rustls", - "hyper-tls 0.5.0", + "hyper-rustls 0.24.2", "ipnet", "js-sys", "log", "mime", - "mime_guess", - "native-tls", "once_cell", "percent-encoding", "pin-project-lite", - "rustls", + "rustls 0.21.12", "rustls-pemfile 1.0.4", "serde", "serde_json", @@ -3775,16 +3634,13 @@ dependencies = [ "sync_wrapper", "system-configuration", "tokio", - "tokio-native-tls", - "tokio-rustls", - "tokio-util", + "tokio-rustls 0.24.1", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams", "web-sys", - "webpki-roots", + "webpki-roots 0.25.4", "winreg 0.50.0", ] @@ -3796,13 +3652,17 @@ checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" dependencies = [ "base64 0.22.1", "bytes", + "encoding_rs", + "futures-channel", "futures-core", "futures-util", + "h2 0.4.4", "http 1.1.0", "http-body 1.0.0", "http-body-util", "hyper 1.3.1", - "hyper-tls 0.6.0", + "hyper-rustls 0.26.0", + "hyper-tls", "hyper-util", "ipnet", "js-sys", @@ -3812,44 +3672,41 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls 0.22.4", "rustls-pemfile 2.1.2", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", + "system-configuration", "tokio", "tokio-native-tls", + "tokio-rustls 0.25.0", + "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", + "webpki-roots 0.26.1", "winreg 0.52.0", ] [[package]] name = "reqwest-middleware" -version = "0.2.5" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a735987236a8e238bf0296c7e351b999c188ccc11477f311b82b55c93984216" +checksum = "a45d100244a467870f6cb763c4484d010a6bed6bd610b3676e3825d93fb4cfbd" dependencies = [ "anyhow", "async-trait", - "http 0.2.12", - "reqwest 0.11.27", + "http 1.1.0", + "reqwest 0.12.4", "serde", - "task-local-extensions", "thiserror", -] - -[[package]] -name = "resolv-conf" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" -dependencies = [ - "hostname", - "quick-error", + "tower-service", ] [[package]] @@ -3908,7 +3765,7 @@ dependencies = [ "ark-ff 0.4.2", "bytes", "fastrlp", - "num-bigint 0.4.4", + "num-bigint 0.4.5", "num-traits", "parity-scale-codec", "primitive-types", @@ -3929,9 +3786,9 @@ checksum = "f86854cf50259291520509879a5c294c3c9a4c334e9ff65071c51e42ef1e2343" [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hex" @@ -3954,7 +3811,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.22", + "semver 1.0.23", ] [[package]] @@ -3978,10 +3835,24 @@ checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", "ring", - "rustls-webpki", + "rustls-webpki 0.101.7", "sct", ] +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.3", + "subtle", + "zeroize", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -4003,9 +3874,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.5.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beb461507cee2c2ff151784c52762cf4d9ff6a61f3e80968600ed24fa837fa54" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "rustls-webpki" @@ -4017,11 +3888,22 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustls-webpki" +version = "0.102.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "092474d1a01ea8278f69e6a358998405fae5b8b963ddaeb2b0b04a128bf1dfb0" [[package]] name = "rusty-fork" @@ -4037,9 +3919,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -4052,9 +3934,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.2" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" dependencies = [ "cfg-if", "derive_more", @@ -4064,11 +3946,11 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.2" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 1.0.109", @@ -4076,9 +3958,9 @@ dependencies = [ [[package]] name = "scc" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec96560eea317a9cc4e0bb1f6a2c93c09a19b8c4fc5cb3fcc0ec1c094cd783e2" +checksum = "76ad2bbb0ae5100a07b7a6f2ed7ab5fd0045551a4c507989b7a620046ea3efdc" dependencies = [ "sdd", ] @@ -4130,11 +4012,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "core-foundation", "core-foundation-sys", "libc", @@ -4143,9 +4025,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" dependencies = [ "core-foundation-sys", "libc", @@ -4162,9 +4044,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" dependencies = [ "serde", ] @@ -4180,29 +4062,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.199" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9f6e76df036c77cd94996771fb40db98187f096dd0b9af39c6c6e452ba966a" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.199" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -4258,7 +4140,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -4283,7 +4165,7 @@ checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -4406,9 +4288,9 @@ dependencies = [ "flate2", "futures-util", "hex", - "indicatif 0.15.0", + "indicatif", "rand", - "reqwest 0.11.27", + "reqwest 0.12.4", "serde", "serde_json", "sp1-core", @@ -4550,7 +4432,7 @@ dependencies = [ "dirs 5.0.1", "futures", "hex", - "indicatif 0.17.8", + "indicatif", "itertools 0.12.1", "p3-baby-bear", "p3-bn254-fr", @@ -4558,7 +4440,7 @@ dependencies = [ "p3-commit", "p3-field", "rayon", - "reqwest 0.11.27", + "reqwest 0.12.4", "serde", "serde_json", "serial_test", @@ -4689,7 +4571,7 @@ dependencies = [ "log", "p3-field", "rand", - "reqwest 0.11.27", + "reqwest 0.12.4", "serde", "serde_json", "sp1-recursion-compiler", @@ -4737,14 +4619,14 @@ dependencies = [ "dotenv", "futures", "hex", - "indicatif 0.17.8", + "indicatif", "log", "p3-commit", "p3-field", "p3-matrix", "prost", "prost-types", - "reqwest 0.11.27", + "reqwest 0.12.4", "reqwest-middleware", "serde", "serde_json", @@ -4833,7 +4715,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -4864,9 +4746,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -4875,14 +4757,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70aba06097b6eda3c15f6eebab8a6339e121475bcf08bbe6758807e716c372a1" +checksum = "5aa0cefd02f532035d83cfec82647c6eb53140b0485220760e669f4bad489e36" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -4935,15 +4817,6 @@ version = "0.12.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" -[[package]] -name = "task-local-extensions" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" -dependencies = [ - "pin-utils", -] - [[package]] name = "tempfile" version = "3.10.1" @@ -4958,22 +4831,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -5089,7 +4962,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -5108,7 +4981,18 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls", + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", "tokio", ] @@ -5126,23 +5010,22 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" @@ -5157,9 +5040,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.20.2" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap 2.2.6", "toml_datetime", @@ -5226,7 +5109,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -5290,7 +5173,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "twirp" version = "0.3.0" -source = "git+https://github.com/github/twirp-rs.git?rev=93d4e4b#93d4e4b4a48f9112c943d2925e8dbb1106bd6a18" +source = "git+https://github.com/github/twirp-rs.git?rev=c85f31f9c54957374e7dcb3534fc52cff0aa2dc5#c85f31f9c54957374e7dcb3534fc52cff0aa2dc5" dependencies = [ "async-trait", "axum", @@ -5300,7 +5183,7 @@ dependencies = [ "http-body-util", "hyper 1.3.1", "prost", - "reqwest 0.11.27", + "reqwest 0.12.4", "serde", "serde_json", "thiserror", @@ -5339,15 +5222,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" -[[package]] -name = "unicase" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.15" @@ -5388,7 +5262,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna", "percent-encoding", ] @@ -5484,7 +5358,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", "wasm-bindgen-shared", ] @@ -5518,7 +5392,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5569,10 +5443,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] -name = "widestring" -version = "1.1.0" +name = "webpki-roots" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" +checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "winapi" @@ -5764,9 +5641,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b9415ee827af173ebb3f15f9083df5a122eb93572ec28741fb153356ea2578" +checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" dependencies = [ "memchr", ] @@ -5813,28 +5690,28 @@ dependencies = [ [[package]] name = "yansi" -version = "0.5.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] @@ -5854,7 +5731,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.61", ] [[package]] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index e81d33b28f..9d70f760d4 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -13,19 +13,19 @@ vergen = { version = "8", default-features = false, features = [ ] } [dependencies] -anyhow = { version = "1.0.79", features = ["backtrace"] } +anyhow = { version = "1.0.83", features = ["backtrace"] } cargo_metadata = "0.18.1" -clap = { version = "4.4.15", features = ["derive", "env"] } +clap = { version = "4.5.4", features = ["derive", "env"] } sp1-prover = { path = "../prover" } sp1-sdk = { path = "../sdk" } sp1-core = { path = "../core" } -reqwest = { version = "0.11.3", features = [ +reqwest = { version = "0.12.4", features = [ "stream", "json", "rustls-tls", ], default-features = false } -futures-util = "0.3.14" -indicatif = "0.15.0" +futures-util = "0.3.30" +indicatif = "0.17.8" tokio = { version = "1", features = ["full"] } tar = "0.4" flate2 = "1.0" @@ -35,10 +35,10 @@ rand = "0.8" downloader = { version = "0.2", default-features = false, features = [ "rustls-tls", ] } -serde_json = "1.0.113" -yansi = "0.5.1" +serde_json = "1.0.117" +yansi = "1.0.1" hex = "0.4.3" -anstyle = "1.0.6" -target-lexicon = "0.12.13" +anstyle = "1.0.7" +target-lexicon = "0.12.14" dialoguer = "0.11.0" tempfile = "3.10.1" diff --git a/cli/docker/Dockerfile b/cli/docker/Dockerfile index c07493c83f..1f0258599f 100644 --- a/cli/docker/Dockerfile +++ b/cli/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:22.04@sha256:bcc511d82482900604524a8e8d64bf4c53b2461868dac55f4d04d660e61983cb +FROM ubuntu:24.04@sha256:3f85b7caad41a95462cf5b787d8a04604c8262cdcdf9a472b8c52ef83375fe15 RUN apt-get update RUN apt-get install -y --no-install-recommends ca-certificates clang curl libssl-dev pkg-config git dialog diff --git a/core/Cargo.toml b/core/Cargo.toml index 371209a1b5..e477ec2639 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -7,10 +7,10 @@ version = "0.1.0" bincode = "1.3.3" serde = { version = "1.0", features = ["derive", "rc"] } elf = "0.7.4" -itertools = "0.12.0" -log = "0.4.20" +itertools = "0.12.1" +log = "0.4.21" nohash-hasher = "0.2.0" -num = { version = "0.4.1" } +num = { version = "0.4.3" } p3-air = { workspace = true } p3-baby-bear = { workspace = true } p3-blake3 = { workspace = true, features = ["parallel"] } @@ -32,11 +32,11 @@ rrs-lib = { git = "https://github.com/GregAC/rrs.git" } sp1-derive = { path = "../derive" } sp1-primitives = { path = "../primitives" } -anyhow = "1.0.79" +anyhow = "1.0.83" amcl = { package = "snowbridge-amcl", version = "1.0.2", default-features = false, features = [ "bls381", ] } -arrayref = "0.3.6" +arrayref = "0.3.7" blake3 = "1.5" blake3-zkvm = { git = "https://github.com/sp1-patches/BLAKE3.git", branch = "patch-blake3_zkvm/v.1.0.0" } cfg-if = "1.0.0" @@ -47,12 +47,12 @@ elliptic-curve = "0.13.8" hex = "0.4.3" k256 = { version = "0.13.3", features = ["expose-field"] } num_cpus = "1.16.0" -serde_with = "3.6.1" +serde_with = "3.8.1" size = "0.4.1" -tempfile = "3.9.0" +tempfile = "3.10.1" tracing = "0.1.40" tracing-forest = { version = "0.1.6", features = ["ansi", "smallvec"] } -tracing-subscriber = { version = "0.3.17", features = ["std", "env-filter"] } +tracing-subscriber = { version = "0.3.18", features = ["std", "env-filter"] } strum_macros = "0.26" strum = "0.26" web-time = "1.1.0" @@ -62,7 +62,7 @@ serial_test = "3.1.1" [dev-dependencies] tiny-keccak = { version = "2.0.2", features = ["keccak"] } criterion = "0.5.1" -num = { version = "0.4.1", features = ["rand"] } +num = { version = "0.4.3", features = ["rand"] } rand = "0.8.5" sp1-zkvm = { path = "../zkvm/entrypoint" } diff --git a/eval/Cargo.toml b/eval/Cargo.toml index ad4ee7f480..b7f7cb19f3 100644 --- a/eval/Cargo.toml +++ b/eval/Cargo.toml @@ -7,6 +7,6 @@ edition = "2021" sp1-core = { path = "../core" } sp1-prover = { path = "../prover" } -clap = { version = "4.4.0", features = ["derive"] } +clap = { version = "4.5.4", features = ["derive"] } csv = "1.3.0" -serde = "1.0.196" +serde = "1.0.201" diff --git a/helper/Cargo.toml b/helper/Cargo.toml index c76b03ea72..169cf9bf1b 100644 --- a/helper/Cargo.toml +++ b/helper/Cargo.toml @@ -7,4 +7,4 @@ edition = "2021" [dependencies] cargo_metadata = "0.18.1" -chrono = { version = "0.4.34", default-features = false, features = ["clock"] } +chrono = { version = "0.4.38", default-features = false, features = ["clock"] } diff --git a/prover/Cargo.toml b/prover/Cargo.toml index bf5d802f34..4b3d0885fe 100644 --- a/prover/Cargo.toml +++ b/prover/Cargo.toml @@ -26,16 +26,16 @@ itertools = "0.12.1" tracing = "0.1.40" tracing-subscriber = "0.3.18" tracing-appender = "0.2.3" -serde_json = "1.0.116" -clap = { version = "4.4.15", features = ["derive", "env"] } +serde_json = "1.0.117" +clap = { version = "4.5.4", features = ["derive", "env"] } sha2 = "0.10.8" hex = "0.4.3" -anyhow = "1.0.82" +anyhow = "1.0.83" size = "0.4.1" dirs = "5.0.1" tempfile = "3.10.1" -tokio = { version = "1.36.0", features = ["full"] } -reqwest = { version = "0.11.25", features = ["rustls-tls", "trust-dns", "stream"] } +tokio = { version = "1.37.0", features = ["full"] } +reqwest = { version = "0.12.4", features = ["rustls-tls", "trust-dns", "stream"] } indicatif = "0.17.8" futures = "0.3.30" subtle-encoding = "0.5.1" diff --git a/recursion/circuit/Cargo.toml b/recursion/circuit/Cargo.toml index 1edbdcb31a..faedfe5686 100644 --- a/recursion/circuit/Cargo.toml +++ b/recursion/circuit/Cargo.toml @@ -15,7 +15,7 @@ p3-util = { workspace = true } sp1-recursion-core = { path = "../core" } sp1-core = { path = "../../core" } itertools = "0.12.1" -serde = { version = "1.0.197", features = ["derive"] } +serde = { version = "1.0.201", features = ["derive"] } sp1-recursion-derive = { path = "../derive" } sp1-recursion-compiler = { path = "../compiler" } sp1-recursion-program = { path = "../program" } @@ -31,5 +31,5 @@ p3-dft = { workspace = true } p3-merkle-tree = { workspace = true } p3-poseidon2 = { workspace = true } zkhash = { git = "https://github.com/HorizenLabs/poseidon2" } -rand = "0.8.4" -sp1-recursion-gnark-ffi = { path = "../gnark-ffi" } \ No newline at end of file +rand = "0.8.5" +sp1-recursion-gnark-ffi = { path = "../gnark-ffi" } diff --git a/recursion/compiler/Cargo.toml b/recursion/compiler/Cargo.toml index e3a0cf6e7b..23a17e796e 100644 --- a/recursion/compiler/Cargo.toml +++ b/recursion/compiler/Cargo.toml @@ -16,12 +16,12 @@ p3-util = { workspace = true } sp1-recursion-core = { path = "../core" } sp1-core = { path = "../../core" } itertools = "0.12.1" -serde = { version = "1.0.197", features = ["derive"] } +serde = { version = "1.0.201", features = ["derive"] } sp1-recursion-derive = { path = "../derive" } -serde_json = "1.0.115" +serde_json = "1.0.117" p3-bn254-fr = { workspace = true } p3-baby-bear = { workspace = true } -serial_test = "3.0.0" +serial_test = "3.1.1" p3-poseidon2 = { workspace = true } backtrace = "0.3.71" tracing = "0.1.40" @@ -30,4 +30,4 @@ tracing = "0.1.40" p3-challenger = { workspace = true } p3-dft = { workspace = true } p3-merkle-tree = { workspace = true } -rand = "0.8.4" +rand = "0.8.5" diff --git a/recursion/core/Cargo.toml b/recursion/core/Cargo.toml index 006db2a1c9..adc4cfb976 100644 --- a/recursion/core/Cargo.toml +++ b/recursion/core/Cargo.toml @@ -15,7 +15,7 @@ sp1-derive = { path = "../../derive" } sp1-primitives = { path = "../../primitives" } tracing = "0.1.40" sp1-core = { path = "../../core" } -hashbrown = "0.14.3" +hashbrown = "0.14.5" itertools = "0.12.1" p3-bn254-fr = { workspace = true } p3-merkle-tree = { workspace = true } @@ -26,9 +26,9 @@ p3-fri = { workspace = true } zkhash = { git = "https://github.com/HorizenLabs/poseidon2" } ff = { version = "0.13", features = ["derive", "derive_bits"] } serde = { version = "1.0", features = ["derive", "rc"] } -serde_with = "3.6.1" +serde_with = "3.8.1" backtrace = { version = "0.3.71", features = ["serde"] } -arrayref = "0.3.6" +arrayref = "0.3.7" static_assertions = "1.1.0" [dev-dependencies] diff --git a/recursion/gnark-ffi/Cargo.toml b/recursion/gnark-ffi/Cargo.toml index 2c86038e15..737d8ca447 100644 --- a/recursion/gnark-ffi/Cargo.toml +++ b/recursion/gnark-ffi/Cargo.toml @@ -6,10 +6,10 @@ edition = "2021" [dependencies] p3-field = { workspace = true } sp1-recursion-compiler = { path = "../compiler" } -serde = "1.0.198" -serde_json = "1.0.116" +serde = "1.0.201" +serde_json = "1.0.117" tempfile = "3.10.1" -reqwest = { version = "0.11", features = ["json", "blocking"] } +reqwest = { version = "0.12", features = ["json", "blocking"] } rand = "0.8" crossbeam = "0.8" subtle-encoding = "0.5.1" diff --git a/recursion/program/Cargo.toml b/recursion/program/Cargo.toml index a3069a92ad..b564ba7ebf 100644 --- a/recursion/program/Cargo.toml +++ b/recursion/program/Cargo.toml @@ -23,7 +23,7 @@ sp1-recursion-core = { path = "../core" } sp1-recursion-compiler = { path = "../compiler" } sp1-core = { path = "../../core" } itertools = "0.12.1" -serde = { version = "1.0.197", features = ["derive"] } -rand = "0.8.4" +serde = { version = "1.0.201", features = ["derive"] } +rand = "0.8.5" array-macro = "2.1.8" tracing = "0.1.40" diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index f2e5447b8f..21cccd3046 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -8,18 +8,18 @@ edition = "2021" [dependencies] prost = "0.12" prost-types = "0.12" -serde = { version = "1.0.197", features = ["derive"] } -serde_json = "1.0.114" -twirp = { git = "https://github.com/github/twirp-rs.git", rev = "93d4e4b" } -async-trait = "0.1.77" -reqwest-middleware = "0.2.4" -reqwest = { version = "0.11.25", features = ["rustls-tls", "trust-dns", "stream"] } -anyhow = "1.0.80" +serde = { version = "1.0.201", features = ["derive"] } +serde_json = "1.0.117" +twirp = { git = "https://github.com/github/twirp-rs.git", rev = "c85f31f9c54957374e7dcb3534fc52cff0aa2dc5" } +async-trait = "0.1.80" +reqwest-middleware = "0.3.1" +reqwest = { version = "0.12.4", features = ["rustls-tls", "trust-dns", "stream"] } +anyhow = "1.0.83" sp1-prover = { path = "../prover" } sp1-core = { path = "../core" } futures = "0.3.30" bincode = "1.3.3" -tokio = { version = "1.36.0", features = ["full"] } +tokio = { version = "1.37.0", features = ["full"] } p3-matrix = { workspace = true } p3-commit = { workspace = true } p3-field = { workspace = true } diff --git a/zkvm/entrypoint/Cargo.toml b/zkvm/entrypoint/Cargo.toml index 43a3e87bca..e111a881ea 100644 --- a/zkvm/entrypoint/Cargo.toml +++ b/zkvm/entrypoint/Cargo.toml @@ -10,11 +10,11 @@ p3-baby-bear = { workspace = true, optional = true } p3-field = { workspace = true, optional = true } bincode = "1.3.3" cfg-if = "1.0.0" -getrandom = { version = "0.2.12", features = ["custom"] } +getrandom = { version = "0.2.15", features = ["custom"] } k256 = { version = "0.13.3", features = ["ecdsa", "std", "bits"] } -once_cell = "1.8.0" +once_cell = "1.19.0" rand = "0.8.5" -serde = { version = "1.0.196", features = ["derive"] } +serde = { version = "1.0.201", features = ["derive"] } libm = { version = "0.2.8", optional = true } sha2 = { version = "0.10.8" } diff --git a/zkvm/precompiles/Cargo.toml b/zkvm/precompiles/Cargo.toml index 91a9376f04..e38ba017a3 100644 --- a/zkvm/precompiles/Cargo.toml +++ b/zkvm/precompiles/Cargo.toml @@ -5,15 +5,15 @@ edition = "2021" [dependencies] amcl = { package = "snowbridge-amcl", version="1.0.2", default-features = false, features = ["bls381"]} -anyhow = "1.0.75" +anyhow = "1.0.83" bincode = "1.3.3" cfg-if = "1.0.0" -getrandom = { version = "0.2.12", features = ["custom"] } +getrandom = { version = "0.2.15", features = ["custom"] } hex = "0.4.3" k256 = { version = "0.13.3", features = ["ecdsa", "std", "bits"] } rand = "0.8.5" -serde = { version = "1.0.196", features = ["derive"] } -num = {version = "0.4.1"} +serde = { version = "1.0.201", features = ["derive"] } +num = {version = "0.4.3"} [features] -verify = [] \ No newline at end of file +verify = [] From 3b4d9509788de83d1fe6f2ba5214835c1426f70b Mon Sep 17 00:00:00 2001 From: John Guibas Date: Fri, 10 May 2024 00:15:57 -0700 Subject: [PATCH 10/22] feat: enable merge groups for all prs (#691) Co-authored-by: Matthias Goergens --- .github/workflows/pr.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 2b22e4d36b..b2f5f2bade 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -14,7 +14,6 @@ on: - "sdk/**" - ".github/workflows/**" merge_group: - types: [checks_requested] concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} From 1c85390eff86bccd45938e4954ea16c1f8349655 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Fri, 10 May 2024 06:55:47 -0700 Subject: [PATCH 11/22] feat: add sp1-sdk tests with SP1_DEV=0 for release ci (#694) --- .github/workflows/pr.yml | 26 +++++++++++++++++++++++++- .github/workflows/release.yml | 15 +++++++++++---- sdk/src/artifacts.rs | 2 +- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index b2f5f2bade..82668a5d46 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -137,4 +137,28 @@ jobs: - name: Run cargo check run: | RUSTFLAGS="-Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native" \ - cargo check --manifest-path examples/Cargo.toml --all-targets --all-features \ No newline at end of file + cargo check --manifest-path examples/Cargo.toml --all-targets --all-features + + template: + name: Examples + runs-on: runs-on,runner=8cpu-linux-x64 + env: + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + steps: + - name: Checkout sources + uses: actions/checkout@v2 + + - name: Setup CI + uses: ./.github/actions/setup + + - name: Install SP1 toolchain + run: | + curl -L https://sp1.succinct.xyz | bash + ~/.sp1/bin/sp1up + ~/.sp1/bin/cargo-prove prove --version + + - name: Install SP1 CLI + run: | + cd cli + cargo install --locked --path . + cd ~ \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9130f895a0..551aebb347 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,7 @@ env: jobs: prepare: name: Prepare release - runs-on: ubuntu-latest + runs-on: runner=64cpu-linux-arm64 timeout-minutes: 30 outputs: tag_name: ${{ steps.release_info.outputs.tag_name }} @@ -33,6 +33,16 @@ jobs: with: pull_token: ${{ secrets.PULL_TOKEN }} + - name: Run cargo test + uses: actions-rs/cargo@v1 + with: + command: test + toolchain: nightly-2024-04-17 + args: -p sp1-sdk --release -- --nocapture + env: + RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native + RUST_BACKTRACE: 1 + - name: Compute release name and tag id: release_info run: | @@ -68,9 +78,6 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - release: name: ${{ matrix.target }} (${{ matrix.runner }}) runs-on: ${{ matrix.runner }} diff --git a/sdk/src/artifacts.rs b/sdk/src/artifacts.rs index 192bd30b44..3fdfcdfa36 100644 --- a/sdk/src/artifacts.rs +++ b/sdk/src/artifacts.rs @@ -13,7 +13,7 @@ pub use sp1_prover::build::{build_groth16_artifacts_with_dummy, get_groth16_arti pub fn export_solidity_groth16_verifier(output_dir: impl Into) -> Result<()> { let output_dir: PathBuf = output_dir.into(); let artifacts_dir = sp1_prover::build::get_groth16_artifacts_dir(); - let verifier_path = artifacts_dir.join("Groth16Verifier.sol"); + let verifier_path = artifacts_dir.join("SP1Verifier.sol"); if !verifier_path.exists() { return Err(anyhow::anyhow!( From ecf9f8a17f855d78fa0ad7ec8edfd02ead92ef94 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Fri, 10 May 2024 07:00:16 -0700 Subject: [PATCH 12/22] chore: disable nightly release (#696) --- .github/workflows/release.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 551aebb347..51700e94f4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,13 +6,10 @@ on: push: tags: - "v*.*.*" - schedule: - - cron: "0 0 * * *" workflow_dispatch: env: CARGO_TERM_COLOR: always - IS_NIGHTLY: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} jobs: prepare: From b2b487314cf12457a71e3573315d3c90eca92e95 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Fri, 10 May 2024 09:52:08 -0700 Subject: [PATCH 13/22] feat: add cli to CI (#695) --- .github/workflows/pr.yml | 24 +- examples/Cargo.lock | 248 ++++-------------- examples/chess/program/Cargo.lock | 46 ++-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 1987772 -> 1987796 bytes examples/cycle-tracking/program/Cargo.lock | 46 ++-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 115980 -> 116012 bytes examples/fibonacci/program/Cargo.lock | 46 ++-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 127616 -> 127644 bytes examples/io/program/Cargo.lock | 46 ++-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 189944 -> 190348 bytes examples/json/program/Cargo.lock | 46 ++-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 196708 -> 196684 bytes examples/regex/program/Cargo.lock | 46 ++-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 2162920 -> 2162940 bytes examples/rsa/program/Cargo.lock | 46 ++-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 295424 -> 295340 bytes examples/ssz-withdrawals/program/Cargo.lock | 46 ++-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 200444 -> 200432 bytes examples/tendermint/program/Cargo.lock | 46 ++-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 1174652 -> 1175040 bytes 20 files changed, 263 insertions(+), 423 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 82668a5d46..b5825cc44b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -138,9 +138,9 @@ jobs: run: | RUSTFLAGS="-Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native" \ cargo check --manifest-path examples/Cargo.toml --all-targets --all-features - - template: - name: Examples + + cli: + name: CLI runs-on: runs-on,runner=8cpu-linux-x64 env: CARGO_NET_GIT_FETCH_WITH_CLI: "true" @@ -161,4 +161,20 @@ jobs: run: | cd cli cargo install --locked --path . - cd ~ \ No newline at end of file +<<<<<<< HEAD + cd ~ + + - name: Run cargo prove new + run: | + cargo prove new fibonacci + + - name: Build program and run script + run: | + cd fibonacci + cd program + cargo prove build + cd ../script + SP1_DEV=1 RUST_LOG=info cargo run --release +======= + cd ~ +>>>>>>> dev diff --git a/examples/Cargo.lock b/examples/Cargo.lock index bed424fda5..09818bd07c 100644 --- a/examples/Cargo.lock +++ b/examples/Cargo.lock @@ -1361,12 +1361,6 @@ dependencies = [ "parking_lot_core", ] -[[package]] -name = "data-encoding" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" - [[package]] name = "der" version = "0.5.1" @@ -1565,18 +1559,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum-as-inner" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.61", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -2020,51 +2002,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" -[[package]] -name = "hickory-proto" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.4.0", - "ipnet", - "once_cell", - "rand", - "thiserror", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "hickory-resolver" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto", - "ipconfig", - "lru-cache", - "once_cell", - "parking_lot", - "rand", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "tracing", -] - [[package]] name = "hmac" version = "0.12.1" @@ -2074,17 +2011,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "hostname" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" -dependencies = [ - "libc", - "match_cfg", - "winapi", -] - [[package]] name = "http" version = "0.2.12" @@ -2200,16 +2126,19 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" dependencies = [ "futures-util", - "http 0.2.12", - "hyper 0.14.28", + "http 1.1.0", + "hyper 1.3.1", + "hyper-util", "rustls", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", ] [[package]] @@ -2290,16 +2219,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "idna" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "0.5.0" @@ -2383,18 +2302,6 @@ dependencies = [ "sp1-sdk", ] -[[package]] -name = "ipconfig" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" -dependencies = [ - "socket2", - "widestring", - "windows-sys 0.48.0", - "winreg 0.50.0", -] - [[package]] name = "ipnet" version = "2.9.0" @@ -2576,12 +2483,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - [[package]] name = "linux-raw-sys" version = "0.4.13" @@ -2613,21 +2514,6 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - [[package]] name = "matchers" version = "0.1.0" @@ -2661,16 +2547,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "mime_guess" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "miniz_oxide" version = "0.7.2" @@ -3715,22 +3591,18 @@ dependencies = [ "futures-core", "futures-util", "h2 0.3.26", - "hickory-resolver", "http 0.2.12", "http-body 0.4.6", "hyper 0.14.28", - "hyper-rustls", "hyper-tls 0.5.0", "ipnet", "js-sys", "log", "mime", - "mime_guess", "native-tls", "once_cell", "percent-encoding", "pin-project-lite", - "rustls", "rustls-pemfile 1.0.4", "serde", "serde_json", @@ -3739,15 +3611,11 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", - "tokio-rustls", - "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams", "web-sys", - "webpki-roots", "winreg 0.50.0", ] @@ -3759,12 +3627,16 @@ checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" dependencies = [ "base64 0.22.1", "bytes", + "encoding_rs", + "futures-channel", "futures-core", "futures-util", + "h2 0.4.4", "http 1.1.0", "http-body 1.0.0", "http-body-util", "hyper 1.3.1", + "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", "ipnet", @@ -3775,44 +3647,41 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls", "rustls-pemfile 2.1.2", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", + "system-configuration", "tokio", "tokio-native-tls", + "tokio-rustls", + "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", + "webpki-roots", "winreg 0.52.0", ] [[package]] name = "reqwest-middleware" -version = "0.2.5" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a735987236a8e238bf0296c7e351b999c188ccc11477f311b82b55c93984216" +checksum = "a45d100244a467870f6cb763c4484d010a6bed6bd610b3676e3825d93fb4cfbd" dependencies = [ "anyhow", "async-trait", - "http 0.2.12", - "reqwest 0.11.27", + "http 1.1.0", + "reqwest 0.12.4", "serde", - "task-local-extensions", "thiserror", -] - -[[package]] -name = "resolv-conf" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" -dependencies = [ - "hostname", - "quick-error", + "tower-service", ] [[package]] @@ -3964,14 +3833,16 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.12" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" dependencies = [ "log", "ring", + "rustls-pki-types", "rustls-webpki", - "sct", + "subtle", + "zeroize", ] [[package]] @@ -4001,11 +3872,12 @@ checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.102.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf" dependencies = [ "ring", + "rustls-pki-types", "untrusted", ] @@ -4081,16 +3953,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sdd" version = "0.2.0" @@ -4527,7 +4389,7 @@ dependencies = [ "p3-commit", "p3-field", "rayon", - "reqwest 0.11.27", + "reqwest 0.12.4", "serde", "serde_json", "serial_test", @@ -4644,7 +4506,7 @@ dependencies = [ "log", "p3-field", "rand", - "reqwest 0.11.27", + "reqwest 0.12.4", "serde", "serde_json", "sp1-recursion-compiler", @@ -4699,7 +4561,7 @@ dependencies = [ "p3-matrix", "prost", "prost-types", - "reqwest 0.11.27", + "reqwest 0.12.4", "reqwest-middleware", "serde", "serde_json", @@ -4878,15 +4740,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" -[[package]] -name = "task-local-extensions" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" -dependencies = [ - "pin-utils", -] - [[package]] name = "tempfile" version = "3.10.1" @@ -5116,11 +4969,12 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ "rustls", + "rustls-pki-types", "tokio", ] @@ -5301,7 +5155,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "twirp" version = "0.3.0" -source = "git+https://github.com/github/twirp-rs.git?rev=93d4e4b#93d4e4b4a48f9112c943d2925e8dbb1106bd6a18" +source = "git+https://github.com/github/twirp-rs.git?rev=c85f31f9c54957374e7dcb3534fc52cff0aa2dc5#c85f31f9c54957374e7dcb3534fc52cff0aa2dc5" dependencies = [ "async-trait", "axum", @@ -5311,7 +5165,7 @@ dependencies = [ "http-body-util", "hyper 1.3.1", "prost", - "reqwest 0.11.27", + "reqwest 0.12.4", "serde", "serde_json", "thiserror", @@ -5350,15 +5204,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" -[[package]] -name = "unicase" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.15" @@ -5399,7 +5244,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna", "percent-encoding", ] @@ -5565,15 +5410,12 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - -[[package]] -name = "widestring" -version = "1.1.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" +checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "winapi" diff --git a/examples/chess/program/Cargo.lock b/examples/chess/program/Cargo.lock index d9e7b4f607..56d9149d8c 100644 --- a/examples/chess/program/Cargo.lock +++ b/examples/chess/program/Cargo.lock @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "arrayvec" @@ -298,9 +298,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -382,9 +382,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" @@ -415,9 +415,9 @@ checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" [[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", @@ -429,20 +429,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", ] @@ -458,9 +457,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", @@ -469,11 +468,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", @@ -481,9 +479,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", ] @@ -719,18 +717,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.198" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.198" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", diff --git a/examples/chess/program/elf/riscv32im-succinct-zkvm-elf b/examples/chess/program/elf/riscv32im-succinct-zkvm-elf index d970ae1b6126e3526f5ac31648ea45f79f336136..9484a6e6eff5ca07d11d302444a204964a4e8884 100755 GIT binary patch delta 21179 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 UZt)d%O17-PuN~#UFEjc0f3|)IVE_OC delta 19442 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

WCFbwSuxOXzr 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 diff --git a/examples/io/program/Cargo.lock b/examples/io/program/Cargo.lock index 75baac3e8b..60d41a3561 100644 --- a/examples/io/program/Cargo.lock +++ b/examples/io/program/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "arrayvec" @@ -214,9 +214,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -300,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" @@ -318,9 +318,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", @@ -332,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", ] @@ -361,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", @@ -372,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", @@ -384,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", ] @@ -561,18 +559,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.198" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.198" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", diff --git a/examples/io/program/elf/riscv32im-succinct-zkvm-elf b/examples/io/program/elf/riscv32im-succinct-zkvm-elf index fc8044ab71ac3f25c56800a58cac9b5c27499bb3..39ebb042cf88965081c11419a6ec2ba351554a88 100755 GIT binary patch delta 47697 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 QbB*_Lklp{_1iAYB7ZkiR-~a#s delta 47107 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 diff --git a/examples/json/program/Cargo.lock b/examples/json/program/Cargo.lock index 915372f777..ba66915b39 100644 --- a/examples/json/program/Cargo.lock +++ b/examples/json/program/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "arrayvec" @@ -214,9 +214,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -315,9 +315,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" @@ -333,9 +333,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", @@ -347,20 +347,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", ] @@ -376,9 +375,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", @@ -387,11 +386,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", @@ -399,9 +397,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", ] @@ -582,18 +580,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.198" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.198" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", diff --git a/examples/json/program/elf/riscv32im-succinct-zkvm-elf b/examples/json/program/elf/riscv32im-succinct-zkvm-elf index 1a2dbcf5604836311f0ae30526bb67e5c471b429..218af530ad586ae4b01bbad23b7e1f55c86edf81 100755 GIT binary patch delta 30361 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 K5B^@nc>WJGRGkt4 diff --git a/examples/regex/program/Cargo.lock b/examples/regex/program/Cargo.lock index 062d59f301..ad1e86bd22 100644 --- a/examples/regex/program/Cargo.lock +++ b/examples/regex/program/Cargo.lock @@ -13,9 +13,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "arrayvec" @@ -223,9 +223,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -301,9 +301,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" @@ -319,9 +319,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", @@ -333,20 +333,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", ] @@ -362,9 +361,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", @@ -373,11 +372,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", @@ -385,9 +383,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", ] @@ -599,18 +597,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.198" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.198" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", diff --git a/examples/regex/program/elf/riscv32im-succinct-zkvm-elf b/examples/regex/program/elf/riscv32im-succinct-zkvm-elf index 621bed8830521a698f3a59897e431ec0de7efd23..6fb4469f385787103f88403e4b0f19a7917af016 100755 GIT binary patch delta 186659 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

t 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 bKKvjno74El{AW_Lj1!ES09LE-2L? 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 delta 425524 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�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 diff --git a/examples/regex/script/Cargo.toml b/examples/regex/script/Cargo.toml index 138e9bee39..f5c6aec68a 100644 --- a/examples/regex/script/Cargo.toml +++ b/examples/regex/script/Cargo.toml @@ -1,4 +1,3 @@ -[workspace] [package] version = "0.1.0" name = "regex-script" diff --git a/examples/regex/script/src/main.rs b/examples/regex/script/src/main.rs index 2717941e4c..846233db25 100644 --- a/examples/regex/script/src/main.rs +++ b/examples/regex/script/src/main.rs @@ -5,7 +5,7 @@ const REGEX_IO_ELF: &[u8] = include_bytes!("../../program/elf/riscv32im-succinct fn main() { // Setup a tracer for logging. - utils::setup_tracer(); + utils::setup_logger(); // Create a new stdin with d the input for the program. let mut stdin = SP1Stdin::new(); diff --git a/examples/rsa/program/elf/riscv32im-succinct-zkvm-elf b/examples/rsa/program/elf/riscv32im-succinct-zkvm-elf index a1e00840b986f17b3dbfcecb8357b0c56ef052c7..b1a786e28eeef28385bd1069f399f2527c826570 100755 GIT binary patch delta 53424 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 YXVQ7sO5@t@I8zj^#m`QYPx9^m040QGrT_o{ delta 53485 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 RD^3@M#Wud1&VSNR{|mkvY_|Xa diff --git a/examples/rsa/script/Cargo.toml b/examples/rsa/script/Cargo.toml index 2876fca24a..962749eaca 100644 --- a/examples/rsa/script/Cargo.toml +++ b/examples/rsa/script/Cargo.toml @@ -1,4 +1,3 @@ -[workspace] [package] version = "0.1.0" name = "rsa-script" diff --git a/examples/rsa/script/build.rs b/examples/rsa/script/build.rs index 32b99273cd..03388acab7 100644 --- a/examples/rsa/script/build.rs +++ b/examples/rsa/script/build.rs @@ -1,5 +1,3 @@ -use sp1_helper::build_program; - fn main() { - build_program("../program") + sp1_helper::build_program(&format!("{}/../program", env!("CARGO_MANIFEST_DIR"))); } diff --git a/examples/rsa/script/src/main.rs b/examples/rsa/script/src/main.rs index f0a93442be..f6c1c31737 100644 --- a/examples/rsa/script/src/main.rs +++ b/examples/rsa/script/src/main.rs @@ -13,7 +13,7 @@ const RSA_2048_PUB_DER: &[u8] = include_bytes!("rsa2048-pub.der"); fn main() { // Setup a tracer for logging. - utils::setup_tracer(); + utils::setup_logger(); // Create a new stdin with the input for the program. let mut stdin = SP1Stdin::new(); diff --git a/examples/ssz-withdrawals/program/elf/riscv32im-succinct-zkvm-elf b/examples/ssz-withdrawals/program/elf/riscv32im-succinct-zkvm-elf index 735da428bf9db270a143672de5618c60accf87f1..6da3afa6e59aaf6e6b98d0022d84bbfceb9e3fa5 100755 GIT binary patch delta 29845 zcmbtd34ByV(trJu2?^IuNJ0n+VTJ?C< zblk;@n_qpp`7)iD)?#^wdF|GY76g7r3%Im`!0_1i3lp{_br7~KKWJyOcK-gEmKE+g z7Qe6w9^+DCSw((odaI}xl1DLNqA>rY{ERwRu_pE9mUCX1uRF*R7!xPX5rhhF+ks-$ zzKU&a)5WND6^GlJMB%N9oYaoV9;xm$x$b}+imX>EN>kgm9N>-Ws1anA0bf)!Pc^j^ zxL5&V85g^2P1@>c_V})z`k@SuhdW%3f@;${Wr%Ftu9aB{%~)Z@R`V#7T{UMI@X&cj zCE!sqbAAhuu9Q8@L3uK-wRq7pA|8gverpX<*2Zr5w_xMn@bBe~kKx}r&zuE$(x#a# zzOZ7!FSVZ58o>_dBxv%AD=u#C5w)?putK+GP#4$yPUSB1H*X4_mND7{O}Q&-h^9$` zMu;}YbnNdbIV8%p%3T%9w)AAKimELh{G0h~&lGQkCR#{X5G@d#e|AnzFV2|}y=oHe zNM^cSi=VxZvBH=Bo)E*nt4MsYb9+}pd301lj5fMLBPex*Z5i3oMF|?MkkP&3t`|RT z;>y^rDazPZ(Q8K!=GrxB$4gDDc~4iA#|U(aw=rk$eOjT){*hith(S5DObF6)c5qrH zr!C0aHGJ=jBFn3&eKnco?MmL)TV&-Gqh2e6PmaGfjKytUF9~T%2VA7i-{Ti@x)a(5kn=kp+_ICHonWiNat zQkCS1aUm_McULTXFZs^h3FR7r`%C5!?hJBhs-Ks2uHI9jF(?wMRt4!X)h{P#nh6!< z&6K)TW5a1Hj7 zLOPMcQlg^w6w;Lx*1OAugrp?Flcq_mC_g0FrCzHZnxN?)Ek{gMM;mh zSK5}1Wy9!rTlPMK)Kq5fu`#3j&ghKn4bk?m(YG4S`V8HMn2ZiACL@!@NM$j5HcHPX z)mtbwjrH#FQ6*R_7Lnx4jzv5jS!WWQb>vI+3-kmPBWRDSV*Pq*-+M%PGztzbg4bNC6cx3kD#Oi z9n>qN4|FUUk8`?E#qs)UD+*_W6|3}YIBIA+NENd>gepGWp`MB#sufpfu!pbF=k1{C zD>GC<_eFB$>{n$_aptx5SM3Q3IhH92(RE}K;s$X)CoCwxlNNPk_prO@GD@L%K_}Le zjia(oKzGrZPRtIJ)>(?b5uI6kHlC(;W}{LkR6No|NQlP$XpB(NG)72>(+COWZ4l4& zMQ5guza~mZo5fOF49v*fAV;f4Q%H_1wC1KsS&+Yu)@Gs6$#gY~r8LQ^o`h(eOle)% zV<~=wk0=F62Lwb`SU^;DflBM>R2S%ZFSY5)IzvECSC-mjaz*(swNS?0m045nzOH~B zU73eXtxW93Zer|VD(KF-v4?0*clKd?p=X|^DK|?_($#m7w+HLZCeZpGX!H@P>VeTT zfzqWk|hDE(;$u$rNzlUWb6%!?akUpug&PNi6&&Tjx?e-Ym%~Dnq{PRt7b~_ zd3soox16T;hPf-LXaH;7s(fiiSE#Fa4C=0;9i03G)%1oE>nOSplz6%lN({p6S6R}R zVRj!&Yi?qmdg85l4oi)DPD)Y>G%u1Nhb5z*q<+~M>Zk5#F`Ee)Iz$y$D!iXcau6Ja zbUcUM6SrO#RQ`9$@6Wn*d}*3cr3k5hnR{LGKKHiT;Rpg++n-HrQJ5iK!calyXci(f z+{{uDHQjGUpjFbCn-RDZXxYsyDT)t>qHNZNs%~aIdTaI+PP^FtKXN=(D|*juoZeXj zAoUgQ)MT_Vi=zW7su_S@J3wi<7Xfbb+b_i^Gqq6%D_OQrGXzNf$=$@Q>_N*B9uI#t! z_vqp<44ZMJ9nQMd(_8t&A!8g(8jc)QNV~zLFPgt4uP7m=wUA(ME$mwGjbNVmvEUJ# zL}#q8F3Q;WQPJuVu;n8v7y%=`q8&cOQ1y|BkUvAaN5IvEbZP{~*I9}l3FdXwXCyno zzNM=pS?84V37Ug~Y;;b(WOVBe!u(DPCQzT-kQ<9=>um_X3v}i-_SdK_n~TUhij9rC zARDInsS*nqB#%Ohy&WyQMcr?Q3GHas?QCg$*My{w!mjeog6yj|E!1W-9G^~uN3%DW zo|@mm#)c*Ii+^H56CMjD^f`C1J9q%z!Fpc9HCN)Q#P6;T%B1=R>u+&GLAj3w)f`vdfH15vgQ{`?X4}Wr@h2rduPCP zjgwl2giHvv*Qtn&M^2M``%)1bBEQd6i#EEXqVq0zMB!TDX2y1f3DKAw)m4k^z>nni zu`D^|M)-8C)Opxak>&6(PLA(iH;T&#(QzN5YN#CK<%8>zHTjh9$MCt8Cixk~-^wEs z3$zhZgf7e*McRqbsDKttME)F2J0`OGfHEgZD1Q=L2y{$FS7lT-S)y&5%my$|<;BSe zR?T}A<>l|u-g~ezI$UWfW^Xh_=D6|zV!n#fX0o$*7#`%PGHVuV!h(<%g|lW2#_IBj(~T=Z93R1VYsO3@22z{;s) z0TM|mZCe1xKTI_Xn7PHSjLd_A{a2nbV|G#OLWtN!V-_O%_F#e*?d70o$`4?=5beK6 z?|W$dLgqmthQ%GJ%OcjR#a?Mf`911EgERdM6!7h|$5H zF_2l+gv-Qydw`}dfzAi0Y6(n4cP>TWR8i4VHj_6XwD7EKD$eitD2wWNOIQPWRdg9F zXrOo*>l`jQCrXxVt)i{V*jtc1eK}HT6>VD%S5Bd<6$rBfG-3rN@G5-0Vp@q(9QbAx z9a@2apIO1WQLhTtmtmf%z`)5p&|6Bbl|SfSY=(nbC~Ap9XMFy!)M zG@XzYkI^DxgW{uj-&DkGiItvBR=1^7#4_SPl8Xm^E*CF2Tba0qdE=Ns4{l%{(c8B2 ziw&$b1O8d!4jZ!naGtq>xC|eTJn%4*l>9+b)htrFEOwKqgdvy@|ajMj6s{74b}8x%XL?{1@%rB@^$T>~`JP zGuL zx|iXO!>!`S@ZKp5_s4r16_frD>$&<>)~$}r;qX!5Ri@W;e@8Ejr_HZ2YaRL^>b#F7 z4HASeLBAWap2CgQL=bPpyCn?25JBGqjMa(EUpaRlYZY6k0okaVuz&SoU87X28l_^@ zC>8gD@HW)r5c@v9`A2%8C16`TMLg4}OEtSAE(dTJU=cl1%^r&@I;IB@gp1VfO@y|E z?tBw@VLB~;lid`z^<%wY1u>02<)s%X{w<8aEV91EI>#4$g3twVBA#4+7EM7hTS2Sd z!h}#mAHBuwahE~t3}Ou>)u7Zux7T1bQ$llVkeGJUo*Fh>ymFjAev8?fW_~L30=KSV z{Y3AlG`fa$Wt(W{+elJ}>AknvQivG;4n&mFBky4LKSHP9VZBA+b4q`g_3LQ)TrW7# zTnV21y066Lxku;5KPC6NJicB{QC3QG-^GX88an+h`ySr}?;Xav?mS&M%m#_kC&~66 zTfz3y+wU_5B3FR6@Q_*iG?^QJMu#e1S>N#g%(LVUI<{<$N!PxPgXz4wn|ul+Ri3xTPpf z2Im&qiPE?lK%N)2(8*zWld~&c0h3s48_ze*vNH)b&H#Y;?{smXw?apk+co4 zEg&D%yc5UW|FE!)-aEl2#3x^XyHLc*Hr&aTeNVDyHGK!a^k;1>Fu%Cq?zn5(*Vang z(Mnkko_iz83Q)F{^k17;=1!pu<*M3gC`v?GDV;{c z9WH}}tpMJzp~$)JNnkv@^0ss)Q{-E4^YO{;ukN= zLD_MXh4*a%Kn>|(dRxxU(~;^cUUd%07yI%qO=k|8a#r&5;9ox@`pbv%c{IW*)PICE$+3N_PnYikeD^0O?N)}Le1sB-WeOV(W02*NS`nu?u? zll)OezoS~0WrOQ#S`-6yP?pJ6#HGVsg0f}Q|67*P?(h&e21VTAsv{EtcY|d*&Ha`o zCl%ik>Ml+?1(KIu0IA1ikW}|^Qu8M0&7rlmr|=%`k4%)GpiAGf_TuGyYV{rK)MeAK zx?Y|GmTeJbD^a$aT;HKL_YYHg^E(!sVi}Go;Y|#d!;`!G6nJy#h40|G-SpmftaHqc z5w*36jE?Z3r2QU4X+5QU5C86_zTdOtu2)CZRbVYfO>{xXd3^BfK-uL{H2ZtjHf1en z;r-0*Jp=lF+6i%(T;Bd3Bd5=3#Un+sYCM1}$V_91oo5M2BS6-nh+n*caUhMOF6UWl zm$ExTzT~wQgR}`{;Ui@|%GT19^Q?VR;+T*mZvQcmbhH5^7EK4wL!%t}l%st5oj-~x zZQbw&kK^ zJ%3G3$(&qUyF;$9j6nxpp# zIg^*;;?GSW&7v8o)q|75-FO(JGL#i?-mnlkgYqicd5Jsi;b1^W$zAgDUr>!sbMm3m z+S+kpwIww{j-~jYFo9)J$Dde6%K6!~wd(xRMsn!3gF;aCOJMAEd?f z$WN?iQrWza>m(L5u#DdOi6!?vH$OB3@@Bi^pA#rUPL?iSmVyIPvkc`LanFQxcj5CMlPg4r!N&ZdKW9_4E>sq%|g zDMMKajYO3$Bc7AI9)6 zFpLA{-r@>1$4eovK==Q~1_h=TV(xFF6Sy2vWJ2x)ObR>n!a&Y0ioycmE5MRHz%{`6 zs(9eOMVKq`Ep7lmufNqL2>jdpkb>=QObw|zVXK03Ja|b9@(&Ppdhs!V0v-rlK$Z^; z0CR<^^(foTK1c;48p9*g5^4$u#>4`!jHKBKYu~(GBHX@kE4A8L+DO9l%?|@C%cX z-`nYg8b!`8z=wecD~<@1Qk}dgg5*7Zz(oGwuq3Z|g1PgK$ zx7;!v!zfQDBr+KfxfjaZ4vP?LoE~={ZU2J}3*=5gs6L<*Vii6DKDR+9EjKyeIp8)k zb;9lza=lozlQ>={Y{N2$(?WTyI1z=rGdvi{VQy8o2@IgO~?Z2GAb{9#;iA zVuTBL4R{$wooaC{aOokvP^Bo?{~C?olQ1@Ic+90gnEAlIWl$IzCBGBN(W-1`BrOYqnpB5Qsz}2 z5yfm47~C2{lq*`eR68vKua3a4Mc^|LxLL9)4K_etRs_zgivzXpx&^g?2)s4|zY>8z zj=(=hU~QYa3iYUi1D9%t)G4@Bdv^q05P>&F;MXJYXA$_<2;7Qyn{q`5;G*pC0^nOB zus;INi@@t5@T(E{;|Tmy7!L40YRPvjRE>bUM&N-F*d2jqN8l$T@XHbSlMoI_L2@-z zAYpx~s*W5)IT6?ufddiv=?J_p0)HCB7$MvPzXc0qoRn5q0doW%4txyT%u-qqMBzc; zLt*$C;G(@c;joAii&S_VcvBc%Y=@-@$7mm9QRt2Wb)TB!(ZK4(6)cIsD}ZCM=M4E$ z{fvc}>R$^@l=~z2a~5G`_qt9v0e+rBo&=r*{=gxn;IoJdS9k*lbnuRBL7#L%Xo?20 zu9O<|1E&G29#{svEewBy2AZq&(ctZmVBP@EQQCVSc=0>>KrpjvvAkOg0hl?Zygd?F z+I3g(J~W_S+#{bx;NO7PzN?4UvVuL@qXA%5!7;%3VR%09{&xa;X}g}g`~?(@3u8DA zTpWg@beK58a5k{I?a%A4fWn4qOvOr;9s|01afKg_!0R{;C>)&OATLlZj?d^+BnM>^ z7^hyG-ZcW>8iA)r;ED+RGO*gdGzvbAV7MHCwH;vLv5-r90qerB7kKykI-!ioG4lkl z5JrCkSQ~~fbP#R|{;mY+?jucZ-^69^V($z!n4p_{Wus5ybCxE`f}Cp1KtmehlJPRWosI+DEs0f@EKxF z#cmx_yTEPu(M6}Q4g@}jvyJc?ZjJCP@G=_NRD3t-pLi{WRB82uR{j89L&j!ex1_AD zXaG|9?7|fo1zbflnu$X-v+?=?9Rye2-|>11Taa3FjJP9~fkF^Vc zif;#APsZkAw^noTdMd2y^WA7_b1^;8tUH_p9g*TBMXbQ;Pfc90B4G6=CypNjPJ>Fa zxuWngu=*Pmr=JGC2)a>`*SrUI#n7%v!FJ&3zJL*~z~jId!O&Bw(0wu7 zk&ZPM4@;z?(ZE`rUMN=Z9Nw-8fXZNV!)ZZ7*ZTKG1bTDBDXb?gZx7o!Tk54bVHUBJb_YX6i2 zm(q-uVzxR-#5|xeNF4G*J3q#D00VqM>ESLqlN}@ENrt6nO?X z4RkezjsRx@YZb+Q2lmp2zlgm9ndsyiROKrYZo_b3^%p{p9|E?Zs?yiOX5bQFHP&{o zL25K&G0#UCY`Oq^$gCGmK_17I>o6&RU+NLqw0Aw+3m<@u)6K%r4YC5j(yTLjBLtvA za|KU(1}P0#aw-ITV5B8lFF)w30;`7n3Y-tD_NN{i7KG9Bfmc#|0zRK+ z;`IuAp!VlRVD(pA-kS;1CKDm4HZk8vA*6y-=W37`_ET4y*)#a1Pku2sPO6S=j)vOYtxV z_yiPC`#EqoV5Bt(rz7Bs zfu()~ed$`{N#ITj{hz=W!{~p5ujbqYTOk0>4G1&;4o)ygvkwFmJ_iNxL%I|Qz#D*z z!|)m4HDLlfKab>=qZhi%0)?@_+OSXYb-)(z+Z2UP1D66z(IDoELgqF>ID&%q3d2NT z0S#i(k}P}XVsNRM$c4dHG(05j;3`ND zn?1k5;Hb%m`sgBV&ca@_E>#?+c?NO{=n|y2I)c|LsKOIAU&sB{i_+7?^p57<@C;6h zsQI)Icug371h|S^Y2whpZoI08O1SP{0#62OOU0I^eQ=%vxP^kPz*~XU&VBkJ42au8 zo%%0$e-5ltvkW06OgI_ZlKu>ME3lFx0z$hAI6YJ#6aim_n__u`=+%wD=Yjdf@fqOU zF#e<$LBOIy=GO=lflEi|g~2H1ZacXH7z%M8aXf4%_RnB|%oQzehGOK4c??EFa~%pu$m&C0zL=aPN9DRte)E83K#XEmg!=4Oes7U+nR1p7rO>t z$Ga9vs~y(~qqPKH)G10H*n~wgaB~IUvKuo!bX0X(4BT9;kJ0-n@E4$GDLSO?5dIDEl)lujJwo`tzUUU5146q}2!9QXUt8NF3EkBXpH!zq zJzfrco;HA_*@4%W=wN&CUCrlsEuiH(abF+?o>EU9@sKhoSWQ)T0rP`Jt(3OPfcfE~ z1O;yg<_C>b`f*@>=tvF0s2o8$fTV_KHZVVolqA;=2zR1@pG@N3;|i1k^HWOA6#ODE zKe41#5IzIur5p|Rur%dz1AzIdCbhw_!2E=hs_+6}e%eWz<^*h6??eGV`s7d= zJORv)L8U0T$<4@gz-`~>wf{vk5WnU z0}vQDK#aQ=S*SBK#ic?fu5rZngPmd>duc=A%L z0LNl_6Xj7oeI*7&f#gBhk75233f3c_ktepBkdf|W|v9aw273S8KRE^={tKyIMd3&{Lo73Ob8qI8D@ zTtJ>GxDyLWML=KVsa#2bTtDh%qzD+G4&glD@CH`_Up}oaT}0s%;Bnv|AO#Kbjwg?f zWQxN~-et%o9=$MK(fk?UF(E1zBf#Tv%pork}uItJSGSAupn1yL?tFURYkaNxq{QU9>Bf9uU=e_ zF@q_)Ggf&!2GcM+H3>rytu&*v*t=t2ynYT*-FQ`qo&+5Gb*SkIU<)1XET)=X$7>sq z)U5C=uzK-UVs259?C^|RC_PJDa`Qi-T?y*dfXuZ^*o(oaHUV4!oC}P=lIXX;A_xP4 zrNIq)&Movq7PKFK3$^Tm?UbEpr_VQX2O;)^SAnliRxuO)0X*jJ5PlapEewAMoE3&Y z2eyRauYmi6;qQS*gfKndMI0$!zNPZdF5*>dTc5M`EVqU{Q zeOab+>jwj023@1jTfdI!_+i=My#7|;E5N)y$GwNrk#6X-F+&C6ce>OK)7U(`;@nMl zG4=Kr@TwjZ<=uB%6>K{jYJC;3dU%w#eq6x}(j|=g>c#u;7vLP43(=bP`REqffY+p3 z@alzBH6HH=E})|zwOWr?egakMJpB7^KK3rMv~V()J$WY|~+QFn2C~0)`RXLxu2I=6q!% z5%?L@kUv&Bhrr9t&3HTUrnWExx;4$a)!Y8netK9bu zS#Fj>uY#)T#eH`&0{^=%re-}wy_h_VvU|er6~nOT_+C*GcJJqyX7t3qC(_aHtj~;V;4p=>c3>**=ZbN2<0<9GR{eYJM zw@`2=J`@+oj^u%|ADDqIxeOipC$Ip_I6rXCeyo$i@I2rqVfYYmTo7a3bm#!aKK#V< zE^i=!2x%H*5QT%lXP|(Z8(JR{gx_GXs=yfF{{TlR3Oot?dl>x$@SkBgy&Abg;J;HWSK+P#Tv9)>5wL+Zstw#lp5Dc&6#5<`HGgI`tXG2j|tsf*FxqZoQ8 z6x^D-Yyuik4}5dH;5OQB7PDJD6VXuBZS;c~UwS7|ejWn4af_jL>?q{g3!xY?1Lu>` zg3X;mys8JrIqL>AmAM-00CX33_C?@c7jZV9i$c@pw*=u);P#+%`~dLZFJY5g!LI<1 zLsMfE{;R;df#G9`|0c{&vwqME|B(6Pg-4)(dU0pbdAn$!J`OR5imjry)ql!BeIm47 zdAfj>SjBAZj}YWQIX~#d6{W=vu>h+q`QnmVj#iO8Q#vECHv%t>z^_K&uOqPbj=J)D z-yuv0mT(395e&;C@csyVHUhWePE;-~ukRT8((lbdsU1 zFr?lF&U{fP?1fy8j{={1Hbg%Sd^`-F2i^wUUE&Wg;a3!#3uE9X#iIAt0*|W zStpHCE}&~6a@cb^;fm6r5%?Sg${I7_b>MCIP}#50n8AqT>Y|Uj$BjK;D<*IN-+WXC`7xvA7y|&HZu?sP?T>0KBWc~VyeYoG3{U?&QbXL0f%?V24LPL0ku!q>|mcr3b}xn z!6KfIxPqSo$1cZOQBf!XnlHvmz@X5F0UyGK7r(SZjIb0q3m!YH(5twmJ9Gm6N?eln z2XM(k9QIHf5auBWF^>7AMT1R%x3yCRMhi25EsOBSW{LtY0B=PQ@)}&he*vcwI)Ug&+SZ$9H6$?>N1Azrfg;t2Rs>Sjun>R2V_}miw37kTI z9QZK$P!(9i@oc?x(3JCQ%CQ!j7aF#cfWt>Y4RBRJ9tM(zSqorMn8uTV!-v_MoE~QJ zJquyc(NGZn3pnRkC}^84!mvG}lMZrng{mLLG!6dsiUFM-!}#An6@3^bdtd?z)^EMp$&cjiI(YXF=7IJtVMA=`uN!6*d0)Ix8o6XsY^h>PHqt%yuljamAC1IT&2tI zSdFj#j`#yag?@T9#@~)kdSQ-I;3uS3D1gx=2{;ct4qbFk5wLm4o~gxy^0@%ibEbV z{q#D5>=9_J2)OHjAm|YF>lF)r0oJ0yGzFijreQha!q!fU!(edQy&kvCW3YN{JvofbOl$ci!5RYpOPLIXlFqvF-gUjzR8|mBtu}8ewVKTc-cDKc5Gnfr_ zcis&GCfElqzt8BgS}j(W$>;XjjV6!V?lG8*K7-L^ba;H(!7gZ!)1tbn4rib~p+Qg8 zVXcp|@rnk0T32SPYi*+8dEx|*+39q<%^tJEYPNa&HfLVF>er`}y|J7WKTu57MvhqO zGf=c>tuCY8<@K6P7MIWMH+X2yK(W8p@3fn|Hjl|`boza6gMp3?6nz1o$?otP>?XV2 zXz;l#KC{Q@cR1WGm&sx@+l-d%pqCot40dOOoT11c(oplk?rcaX{W(Z{pkZ@DL%E@r zLnFB%&QO91G{hS0--gV|4oiCt2{i@%*|7cQ#+zjc+0~#1N;d^CO*F{c_&6~&-d!fi zu7EUAHKc*L@iA>|ys}1QiGVUyHl#sVK5vk<@yc2(0X2Oz*bBzScdoJVy%4~hqAnL2 zGR)L?4NSrO-+)~KBb2U-SfbdY^N8^8=NM$-)Xft z4Nm35;ONsL76=xD%V{t<90n|BJT9CWPzJfz<21WHewW3A^`X_^Gn$QNtH+DwhtFv< zT50JB(eAMVTRc{~*N^|%orcENHfD#CR6`AQ87bx@*nD26#piXH{eH9EZFA@0!=}eb zY=v(dDYgmt{WgQeX7QL^eyrY2p2n+T3dTnRY8b<^Pb4dbW*y&vH#kNjd9P))G|*AT z2IwY%{&AalTQ{%6ZgD%!=x2w;V>kQru3wLC8YK?GH<8tAH5oldgWK-2x_v>f8LSSc z$7%97jRudw=kU7?7OT{=0ON7`y*|&hDbptx`|itjc`W$wvKswf zr^91%nWSN9l6tK{HaRF7WRsJC!WOuGt8xrBD9+kAvKuhHgoAsZWv$k!HwytRWExGv3b z0~$gsST7JM6cH07M$#;T*LQC=wwEv=c$~<^K9|vNR6FkaG~@N_1q`O^6Ak7Y&~BuR z^#=89b!dUQR@mzh>(U%IpgFHkLteSAXN<CQO^` z&30lwz1_(73;iyu2|I>L#Ch(0aC*tK3GT@gCr>TOw)=gENRJb-XE9rB^5VfL+>nVb zjTVOl?su0I`?6gQo7H4BVROlCHn>a%r4iTE2PaLNnQg?Lh1X(o`TQm$W*bW*s7B#N zbxlF)$ofQ^gXH?CmK##7m5w{a34Lh!GO=sr>I$(%bXSwf;C2~2W~@Jgw*b`!z*5>k~Kde5x*KF}Q%wAgcg!p)%;ayxsJB!8W za9V5*i`|Ijf*D=ogyD_Z2R7Y6LjT5zuv}jR{p(5b?szj6avq}%A6W1eT$o2AFNm$F z&t9=-<N17aI`cAYp;i^&H2)dnO|o5k)mIc3t1Pl*Y% z@G0>~yxrtCn62n6pT+60m@Ja;TzY(fs3mc|_!)itv}n@09oXix+N=%-7E=blOO|3- zCl1%Ty#^2bZgaU!2D8oXqV&Is0WH_YY;@Tz5bMW-ntv}2>gL9Fs@3N)8694a$7i;y zy8N{stOHq%*<;G^P$87go>Etuw$W zw>OCoX^l3o+h_6l4PK+mX?9xZ$cy5@E;g^l>9+b!HjfkAqaJ)R$Yb*w&r$m~#JgKv zQ*5F>Tf~uCo84-%cw8>0)sG)XOlDekNE}H&Y!T1*ZP?ZJ>$PdJP_u1fSIXHcwu#4{ zydNKDHox2FGFW`ZJegLpRcsxPmfc3X6_IAQm=V?zts8y4RZP+Ptahsfztni~`DXO^ zT$L^VE;eCWyVdXFQ?%J{!4h7s(UpcjCnmN-j&i~hv)}EoAiCXo{AU8A!8{=|zaWzi z4#zNB^PD(dYx7y`2BY5!Z+l!Agrs?1oDpz1Oa=!&zAQegm+$xI$r0DkS8KL1BSes+1*SQ zyUU3+y2FMqET1`;=<)r8?C!vRyuo3&n~=xtm1DMx`&rlPgkOCo=-&`02I?U+(mP60 z{_h3wQ5V3p_1{ZS(!qZ(z!{K7%6~7xX!xHb1h5ZdH2zN_xP?Jkzk5PSzl~8MQ2*AP@qdnNqq9-I4BTLU z(Dc8BHsaFMU}X1dXp{2#zN964#8fKZBiaKE?slpEG-8p4bm>4swHcfSoLj)>vb26_ zScKxxdPD>oD?{~1Ju(_ALQNLoB4Slji0`dxF?Zt^SBt~xa$v>nm)9lTtX`+rY;}1t zi(uBbyVP|_Jsu&<43iS-AyocSDK2Nd8r*(T0>_9QUMH5z77G><79$qTtKN%BrsJ=O zOSNXK)U0l+&5g}mx7lQ;nXih4T9?7-aM;W)qrqh{8!bNi`c<)C-v;|ejnr_b1btGp zPaLN8SPl51bYs?a`#gTXlV0D4-*!DNH#V3pMy!{;Za=11{3qb=%~rKHSuls=YXu8; zi_MDPLGbI26f16v%j|VnyiV-TSq*-V4Lh113yvX}v1oS~yxB_F8yk>dyMc%sC_&%u z7YB94_lm`B^!Y7jtnm#-quQU>_}oZiUlSjo%T?ka`rtKjFd3@EJo@;u-h_BH7 zRid4KJ0u#KOt{}W`2p`_8gW5P<{v)UH0pKn9Q}Ae>_ZFwE#6GJ&%_v7bxBO(a6EnV zv}mR;ssLTjitfs%4~jEbg4tw(Kdij(O%|)uVldfwJWWijhak|@JH<|^O47bALt7;q z*26&U4vE?Iw)x@)u`SIyB+jSa2k@2EuUhO-d3Uu~)~qt=sOZpDK6gnx5nK7yzs2cs zR1h822md+M<vP> IX)x*fKZ@4RFaQ7m delta 27644 zcmb__3tUuX`u}+k44|S70wRJi!$n0A=RQN4p+a6FuVk8_%vId*R#slH!4$JH(=Z?V zt+r}fR+f0hEmPc}tjKJ&P0L!_EUmQF&C1=i=Kp=qoHH|w8tm@>d_Ko>zVGwA&-=X3 z?S0RgLtR}TyL@@ts!ose>yD7;s@Atg;5@=9$(ia{*+ORXj=p|(7=x7cu~_Hs&g(tS*r zDlC3BX&k>seBi$>K3S_v?ItdsS-ZO1-fji!7i$i&c*ex3)q)U_trC))oO{S;Po<`H zj+o}}^X7}Pj9t6drml%(9e4H9-p+7Yka0Nz8qMmFDY8ksR`-hUz{+a38pomSsxecC zi^erB9+x=}F761@l_d)}s7d0zmM?ow#6|b`&s{+3wW$yOE!p%3{Cj!R&CgaB+{`&M zW1sd=T@usmTK>X)jFs(tF+PfYQ=728XL@;jO=LuTlsd9jCCGh*ZJ9kH%i~pQAv3G? z?(HX|%QK%>m1l0Qy}7P0E8kU7w=>$TT3=feCD3U;M)kh?)Ix*xBdri0g?4BeAD|V~ zaauj6EmiFrwQsw~RJFd>l9*~&((C;>8282!*yO|;BU!ub4U&-PqFwzCrigK>7kR(h zrK+t`|3_52CLK~ovwgLdhq+b;gF&Zhf~O8?x)fyPpO??V0A<0}8FPY38xO?%>19faDN z4szdyNuji-j&y4ukg#`G){zlRY#LNM>w_+7xF`ma)Drshj`CmyyEcE|VBMMqavrMV zY73Q$;M%CBTX$(bOd6IryjIm9WcJ!9X7=78M?%rvRGiF4bsRAh*(RB-#yoN4O`~9yyw)@#UNtDvA2AKtJYtYHlc}^D>n`=H z>c%FqJLp6=_5p*`6lUzZF*A2ZWMI1#Ao@bZ5tM%A^=wzNOUJEh@@CY1M?xtQ}%z57;J`iPG#;sv=USvG0<>UH~Bl z0%?4{v(*i8&NP(}QIuRp3F&N9IJuyMpPW!eRq5<@mP4mA@z14nHX@w0;g^7<5)ITV zqoW#@gv&Wiuw$9_+K$56K*t6x8-*U~45?$Uj9|z08Q1A}OzF5LlP$PLpLYVPug+8i z-51VPuwRium08!$zhO^6$nh*mh$fp&X?Gj9bNtep3A8Mm-NPo*Wwb)^k{+xdn?y@` z08OMbJ(v|JwWkz+qkFP+R!XyavT-SsYafjk;v;cB7A4fSj}qeBsf75Nu0p1UKJUr2 zao0o%se7@MjzyVS8~xF$Qk9Xd7e=#FMK8!-PwRSN&Enko>D6_lF89#3{7 zd_*ZoG7u2GLIR>82P&c&{Hg)aIdO|=!ZMKg{<*D(%NI*)*!|$9~W5r&Jx#15}_xue zpktqk-esAawg@vX{`FseZxt=9Rkai3H2Y^rnpJ0JY()0*O79=mpD{HHkU^+0eie{+ zi%=f~8ZFgPOQ3&LQB8b}BDeYn-tHeyELuprjhOQ?x@d%HAE(>_tcc1?>|yo-%^Y0*lW z)gRNXrSc)HOXr#unZ2Q|Y%!?2n(8=tEgkL;CDv2q04TAp9!dQ_JK7KYXRZd!XQ zb6zLjVhdPGyBDP*wN&*g=?Yj9{3Q8hN6=5X7%`6_Y!OvlsZc-7DL`*RIgrrP?Z^SHCi5AsF>fxBvpXzgmvjrl%kG9^<2<|B;W-o~C-u2t9shKX0MA}Ru z^(fZoI^HTC1sRj5Viamr8SMs>cFN-Ci>Aa!brIsNU4&grzZQ&B{~|cW=*Y~iO_MWU z`e^c+(U{9|DjAJQ{Eh0|h@qzU!$ST`+C3VkE~C?!H z1B2pGMlp9{gtsX7PD~+{=HAJkjLV5n%ocXlY!Upnddo;%$HVa5Y1nx7Ceu*tU2IZF zLBIGb7Bu1UKtZp*i`~To@GjQx8m>hWR}+>!%>-%9nKc3KE~8}=*i0;NSIb!*^_a+} zhjcv6#TQfr#BZA@iI2Ryg?K;LpngkWwFHXK~TZ;j}e1Fi{mPtHIQ(C~_$hYzfU-ibAr0wk?I> z=hNY(%-C^fX4WCW`V+61Q9CK-5s27H6COeI?ZyHvT5CX2)f~ifAzFWw?swCMN0<|Z z7&FeMoMr6hj`h;YB9V*gY1T3}D)BW;DH2l>W(w8q<(~C)d>N}{`|B$n#roU*07z=* z8kM+s%cCq}%W$^%`6i(rQfh1V9H1pn!2gwW^$ED=0BKgR{)q?TqcpH*6l69;bD3Cg z574X?(D?v0tiTlE&L`oUgH-+`dyo$xbabw6FD}l0j74OR2pOR0AYBFv2B=)gdWK3a zi114`AEd1-+1rpjYZXfALE5$ormUo1Pa(_>(CDYIfFH!uD}Ngx8}O}z)c6!azLA?| zD&17e`p~9Yb_+XPf4Y{Cd&QI*~5&M*-m%X>Z|gKSr|%1@RayBQ`Wn z%xG4+{Dt; z)~0BL;WHkvS59-4%$wyF64Eu&%Mt#9BsPT%&#?@#Duo`~i`u*7IaZ9_@`ul{6v(0P zpJT6zu5R?~W_BB^sQ+p++b%{_rD$s7n6`f33oPj-_5IWB_s*QxuW+XG{^{-+bMB+R z?qvnnw)U&PUaPmB{ctTWB;?S```EfDzi`qXXBMjYBkOK1ctjqpRvYphQTfmyG!xaj+*&6tyS?|t<6YfP)kdRHqb2wv|tEA>M+XDW@OZ$YAeqP`nhuJ`}@!}_x_Z}OVo%N|!uwghCuKc)f zj@@~W#({t4+-rBbZ*GsaN?P?E9?zE1rT5r(sDht0V>fq-eraYy#mlGYw)fdnY%867 zpE=w8_?cF)qRR;?I>LHLQK|o?6^wM@Em(E-pHZZWY2%;Sb}#R&$9Zv= zR?zI$3PW%|9%lv4`*AMDxfbVUoZE3W;yj7-9L}F`wmYpA`r(|4vl=Jid=BR}oTDLc zFRt(7{2J$FoD9mX-ht`is{2BlCg{L45TFF-G@NsAK8BNUZlVjvFyYhG@i^AHNSb#X zv9kJ%R*1v&=F*|#Se0YQ{1K*Osds;bB})G@cG#Uky%}f1S-)ZUl^aC4-mF1Z$TS_@ z@iBtQMfZQqZjGx#YcFu(xl6iM)i-_29*=0J`_3QY8k+biOgfqte#-i{^P)8goNMS1 zTHEadjFQ{&ru=7`63@|^q;9Q(1(tSSZ-Lu?Q zfa~F~wi2}MBmI{wUTjFGXU}5IFa46mh&ByPKFhjM^_MJCtk%*)oU#rSc9FJxiD}QG zcfOQtbqRgh1X7)0nK{QZeZE*ofCf^Pl?=F#vKi|ng2`+QY?DFs{#R}m|wuo~@(+No$tK-+SeqcT6=+`i@a0~tAYnFCP!!14^cRN2MKf-~h(ZalAYJ{i;mtn3kz1z$+Pfk7X89e z6(yg;WdoVdp>ZWmJO|FvG!Koc>O!Bdkv5)XNmO@^MWV}x=U9^JGG3gY;kPNMuow7c zHMRSOrRQuI)>6~*C_z|>wk)n94h_yZXxl(zzG0c&PYs7*(8LX{7%~BHH(07^)i*3D zv1&xnU7U0pq&f5kNPQ!351NmYVxt8i3vH)yA8L;*w4W#TElU?8@1TrtS&y9EBU@Uz z8Z7(6+E$~jk!F7jZ#IvVz4I*6o3PKmWj&)BM*DmT zj6Ub7r1=i1R7W}A!M=@j$9F8LcWg;Z1=b;J640i&nI}&j+9FG6#doY*@;1;y{mkck z2J~h+1aa&to%{}&Q#@X_NV#7%9zZ5krV5HX&*BryLDry&AAEpPkSZzvJWI)0eOJ(y zyw`G&cB3scQ#PP&8!bG~(i5{L1SRqL9|uWCJ3wLy^x=7EG@8EQsFd1Wz@>_E_+>v0 z$0hly!{?ieUfk_GHTh&VW8o~NMHkR@KflDQj-w@&cAzD>%GI(1S3VNO@)Uh>L5kpC za8Vs~gNxYrES_}Vv&inb9-j|yn68PgIp{fn#(WRK1ykixQ`|`t&;;bUw1|_JgFFlZ zpr}OVmN^dce%gUi`fdYR$yGjwt03)0n+Eqv0P^+(SaCmHf<%@}+P`CNg=necw@JyS zX+B?_zr#uf9e9U1AUD$(kP}_M3kC%rYXe9nwD9k6!v4zO@I1kegVabn{*EepnNI$l z^;2D*?endpL*F80i#rO!EXuhE;shFV5z$a`f6#~ApzFXehJIm^7*Klyd4L> zZU$)?EkdupoD^!tW{_5+t%UQ2gvc4RAEiT=xX~5_0zxY8l9g{lH@d{h$E$q4(vaSg znjm*2?LV-9*~t74mYIC@A)jx993RRGu^L=UXg0VK*Ht5fxey$=IQN6Jj-L4k>zBCt z;h^ax77Va~KKlnty5-8^;0nlx&BZ_G(WWFeZ!5q*r$XAeh!V6lll}*2e;Fh>>H_Jp z1mrBTbFyoR&sTvSFil|YyFuPft3VcorS#GdEKfCI8D{7AeJXZMC+MG8f3VVOFT=s3 z>6XhVM*GN)OHS7nKA(1AhfvtcU}?`))j^ zbkhi1!O#0UCt;CH(Fg@Hei^tJSSRByWw0SI_dEE92v4AaKgT!945^bb!BmZ8ATID_ z;0jWjszy&h@qrj!WToLFIAtX<&@ANO$DPrt&e4?Q#2ux9! z4?F-^(fCo|0^n*{(pumK;8Gbcy9?F1UJK-($pr_^_=Tkz{x}Vxbel#np+@nU-~KzK zQISSSV1DeVgfe$xMu-JY&zMdJeqkfMlcpk6AJ7OfGT*Df=Qe7j?I!2*0e5{+BkV?T z<~SYWB$R1{ZP*5J{5#<0CD0F9!f`Xky|Pa$B_6kQr+eV?KWc>yvc98%do4pqh!Ve7 zco7XpAJYh3@jSx?#6r;qr$!i!+~GK3Cg`O>11$kQ4qO0%obCgz+pZNf@&JQoA!J~n za!iOTuo!q&2)zmTXaIXfA$m3}5NHsE5x}|-`~>i~m;n+-5_lAN8*m?az|Qv~NnZ=b z(w)FpL-1PQ*w^vQDf52{d{L2qCp1jE4MR0|c{_+3fd_=} zM?Zi{xh0rlqkvZfLmA2b2Z7fD7s%K#AJ2X0&oQ*6Nlc6zyakPsTTw`4rpN`D0x&Ph z+=-6?H$aJGe<$H3;MBuGrOq#)SD83NwP+rcC9NpF+_`Bk+!Vqxw5tAdQOslBTe?7q zd_)SDe5GM{VHkb}_$c15Nd^%_;Z5L%5PSi+e4j>W7NIMGAOnHAA%tEGTo=S%;Q=%# zFX(s`-TE=?nMJ?h7_?5VCf~Jj8)vv^1)}68HNV|FMm%9t^F2x5V#6hQE(IRfDrsX za2>|WgiOp|6n;iSaR@_3H>6Mqz5}>21kVLl-fZ&z&p}~b6N(V?n|KrG%E1+G3d84u z*em&{LyE%g_gP*T9utP=gkcK9uZ7{y!mzYtN<$)eB$KALRA68jz8g68c+jLvfMY}O ztH8TI&;0k@S1OpsHl-}w$>B2Dj zGu`PxdofKs(Vaf$*RE;wYkM(Ibf-~X2V764(PVzjPp1|9O6hcfUpr~&dwzXVLus+- z7q6v(vA`>|G=pPR2CcwVbxQ`SD(#3BQ;MeImM~XkoAng%bHMFn)!zW#2HZ===YY4S z0*iiI+>AIoPH`Q@KG|;Es`0v6BeSjqK7nt!U^Sd7;Sz8)**l8wC8lN}<{(vCH(;Ql zz{_Y*C$UfBy|`TqDabp?cI$!bXi+EecGY3rHqeLQD*6GpN5Q3JL0UG_7O$@rJREoe zFp@@+G6z`waS;CjcqI+GN$k`4UECfG>H1?fJ#>?p=Do8Aj07FwY)OO{Sb53Lo%#~6 z^0J-dkAP#Ll7G4|Pfz3x@JP9TAK=r#dKr%g&ce6`87~4Z2kz^~USS&=lvnb6fRDKV zF!Yl<%&&psX;@u&SfUhd23BjdLZyt409R>)^ee#oGlKMtrPzLC1?eL9v3x`dk(YdF zz35rBI56@5K-d7|DK2RO#>1UjOzC_PxBRQx81!REHe(K@#fby6=jC8*bcvGMv2FvG z0xSOc0JxGC#fg2q|H7^E;{u;%cJJVi3>=RJei&VEl0`*7DhMZ)uo6{5De!2W-%s2O zt5(Cc_z(gSf`S_*`~}#g42^>P_FC-XfO*xxq8uSC=uLT@#eqeHfvQggQ{hj*$CZvy zEBiLRUm@0aLRZ<>!ry^i zz)Gy;JcY`o$2Nv%8Rp~wZZv9z(~!q;F6OWt{E|m7r@sFObHWB_=5(XbfCjDrKlncB zz2BpRp@Wp>z-QLsVFy?;DsZ=4dNy9nQ(1BmQ}kiHm?GM9>HBzbVCPrS)BsjxnkRB; zU;>JYtuM{M)w}(1n8ED-A%^R=q84dy3i{(9@Md6>UpFCpy&zl$j+AlLvn}!8!tkg+ zw4|@$Mw1T|(|F&`mJPlmeJL+de6{FXwAY;s`ZF;PMg>+TQUE*vSn=mQz=a|7HNZItoGd|C#h-(LR|6~l`~j(UqJPkThgSiEuK4c~{HxB# z&n}o3w_y+1Yzc6IAA5y6(a?wn{w&WK9$SM)d@FvhkvlZPNQJ<100?CpP<(8`0e1oO z3Gjo*!;iqtP(XLZ3>ka$%N_s=%FNWhM^cUIed#Yu;F?Jc=Ny@=0A=` zg5HRMxT25tqqMGAa<;%C+h|Z%B*z`g&_$^kVx+M7F)Y8I$bNusXMrz57k+SEa}Z!D zpfed)0+#|yegr)dwpa_?L#7V}J{>|&AmsI}m@5Q8C9iNElj8#*>7)UUJqHEw6QUFd z5ZGli1_;3uftQ5{TnD_oKr8U~nS72%fz=@oA@N&~-Qc&#^2Y;L0!z^#7NQ)W;Q$)a zWrkD07lBb=B!$wShX5#Glkq=cJmui~heRD6NXB|zqNC4~#mR|{I?PZ}7~%ML;L|jw z8&^}STt@pj+R;r+NleEIbOpT=_-N=o0yvhw0LgnlZYx2G zlSvzZmjO?Zam)$~G|2ye$t`i$lOSL;E{fxaVA)ULYD6t2rV_4VV#<%T+_igO@MFdD z??JwDV4}1jMO>shi$)uw8U>wOh=pT#9DWLyKS$;L} zsUrBw-+!F23k_Kz0v4j)?YK~>*-eD zWg++&a2?G~7jO6eid*I9bRJ?kNR5eL?Ih2o1b8lRM;Uv8*8+Ey@w;=dhK~(8RfiH$ zjafB<&b9suC1DhPy}ym~!%4lCqd%}*BD}&qXgC~f5MBj74>Ku&cMuVc_QqjC~0h3UM28{3dWNCg7Lv5{0OjArK9+M#6AlKA>a) z4EQ+kWnerJND90UycG&4B|^OoQ3K4M6u5%pfR*nRIDW}OX<9Ka>MdCAN+ONbioLxt zRxo2Hq&RL4CN&3E)S#IwX~Ifd0URsigRfwvhmML)>{Udj;&^25NZ=!&_X0m3b0x4E zUmqxQ`ZMrPpi5rkJFB5q`c*5A6rENYnSl^~0}8Fh7Z97d0E9t56u1GjC<8@kGj1Ed z2zvYj;8U~%B-OugyNN!`5Z_Z}=kuuCm?^&Q9gSP%n+q;$zKoSpwHcUyQqfr+>j*Ia ztRh~SQtMBo$|`+)KFNuYo4f%vH$xQk4` z6PSOHqFAsRn17tYE$rnce;Ez@OBJQVUx4{nD~bXP*~GtKQCyM>ye93M?iFXn&eR0B~0@tc3thzkM~bc3iM- zz4kO7DaHr4ZKntpD+>;A`Wei)Tr13#`{!Z(>~$A*8nOZote^YsobL4xupJG}Aswz@ zK{Yvo0vsZ3nc;m{&TluBuqd_;n#pe2W(%52Nzf@m0JWUUkqFf{vlG( zpy8EU@nkXFiY0_67UINWhU>yw93J^Fz0Wj$-TsZhP(o$)&H)hBn;0F z!y5|dNG~xj`w-f%ekofXuKNx+@{C--ffENoAJXQCw~xIQx2M4>%>kroz?{_~`17U~ zSUI?Abz%7ZF#PQxI*=o#Iid%nL_?0`e8|-U*8xkm1fB$}d?v-CD`N*1IYmX7&M9NX zwl&~a4z9uafrk?{ox4>@=-hci+H~^UU=eVYbKF@>CHbIMTi1ouV){NU&(&F~c zpK+^vBFEjg=rxoLeDtP_-UzIGHpfSge%+6mJbDJ-=g0^5;jO?rTE$11hFcTuz-{7c z+?GJ95|0Og3+W4xI)BSMfFwB&|0WKlPC79y!!Q(1N4pZzBQP+>{NRd|4W*GfF)wjG z_$tw^EG1ij=h7-2L@!5|Ufy8IJ35pO=){K%&%$Dbi}2$YCc!PFgT=BI%P$gv|BQb8 z!#`!H3qxs!9iL7Gu8~7OLoL2Z4bK@#k0xKUBa@>BH zG=%gIw_VRLT-Xv5{tjF#+K16V1Ll1SM9p`ylCWFUa9~W2TjA93ty%hIX zLwNa=PCVsTj_a@k^kFpH1PxB%b^@)!tvC91JiOvFMh*ii}`Wt|ik1s*@3T0?eKD*={mH|J64$7i^WjA(y zOZ|rAfwBUrc?kn5h2|*mMPS5{J@&R5& zg#0VOAPN_O&p-jCHWVGeA8>%KDDVjIcfb*{0`CBS6GHEBP!PTk!FK?kQTX{!LQkUM zatOnRz&`*hGb(OCF$uxDU?Jt;A$t-0yEv5q&F|YH5uz}j&LBCq?q}THfxC8?FKnw1&vB0?(f-$rZcmNHu;^od( z+$x{Sa@M05Dr*h)0hk;&cKRVf=zS4iC38_2+5tQtI30A3w*WtL2`{;2d=9u6LrswR z`}_&%58No@8Ne0aYlT1g`Mtt1D4-nNSigqhoRJDu-f)CrZy0_l41W}cg;AmMXueJC z-1#|PjGpoD%=x7IjG||4sAXwy;!OtH`DZk|eSC|)mwb!D@U}4gaTpf473G7^wQm@n z&=Pxni(5AMUJb)1!*JvnMZDiw{lf6wVYns?*R{ZfmwcbLXt?By8ryOJeHbnc!;g%m zPB)7qy*uFcARc7IQ4|P zkjEI5mwY}b#o9z24d^eb)epN-n?p$hY+`}>i;|Y3(kYu*;=P)xkwkPxZk@Xm>9SoT zU~xnRWx_?^(=P<+!g$p95ZnQH8*r}7p9p*|gq{u@xkn>adoIrkoB*64^WQNZPZGN4 zH9{2($r&brp(5L#pB#6_9M`&oxExq`StG=vI&%6{;1A{ZNpaX7eGGhJi$=;$OKKXk^^;ZdkI){~*ByZUQcO5Js03 zJ_o$^et#|E^zM`J@^&uvA2R(1;NqH~yz!-=S7?PgS^i!x8e*{(R2n9i;WgI15Qrq@ z0zU#yeZc>Mk7L(l?6Br*h26>k!0N^Rr(8~-Fa<80iX@i@cn!EA1V2%Z1@<6*O_u52 z%V?-<)JP?b3&^wMx&1ATa2$(1#~$EWhcrT=++nu^K7@s^7m?_hPVB7kF3Kk3FA;mW zuWN)2GA{HWhTid8APyyYI`C!0K&2@4_X?ZP(2Nd>$x15Vqj~-<99LjHa6vyLR4=5smaI8du;ii?I}fe*=G$!5gf|hvtX0(#L%q z{|w4htt7HM60_&g3g z=8Qap-jZ)Oy3D40o8FOcv*bI?9;?-8c3a&Jk4N1B{7?{ynJ)8`mTbDMZV zZ8f`W`F4w4Z+GkMF0-9thKhaT%pQl)?r^!?CZow_wR?(wBVqy?xNSDO!R<7e^7D0i zo8D#Ax$IWE+hQ=9>^h6nm1k6RZI#n>T~6=yga%@uRiSNHG~lb2GCN;8Cz?4-oZ{5! z^g5TzV6?d0=6r)gUvypducy7Wt(>GEE~co%Quc6YwZ?69~!7MsiNvgSL?c>yc6 z${BEHtDJ$9)(>xO_<%cG6G~~fix0Fuoj~5VCND3L^{sLS(o^qkZ8`z}wkp&Zl-in5 zL%^P`&)?YgX_@{54P-ZYXXLdyF+w7%`i>QN=U{pWB2l{J~XO8ID21AW__t8cp(yuo#~RSgVn*T4{{|E);%qFx1xbt}B)Jgk87 z=B9PlwrSwy71J0<$5zGa{{z;xgpAi;v-NF{8GYL(#^)8>2iqR+MJGjodX%_Mf>GQE-%FysVfwaZ92&VfVoH_k> z^K`oVbkk><@4Z*JZf$!xaSEf$abOmK-sSZzkV$E|ZYJSM#{ z-{7)Z0$RHrE|(`i->Ns{JM4T%;nG_Tc9TVKbD+&c+sBDkC)#W_m&IYt$8&b1I{oy}qM7&)?uD-9bhn&SNTt4(H;gq{rCMV()1?Vw zYJK(u@g$@6rD6*GGFco{uPztM2Gp-zC&otRIBX~c76i54Xfc@0uA;okN-1eACNqLv zpRc!?Q6)?|I{Dy=cHcjM`x^`vRRzO zZZeteMym@CUIv#l-)SS?5iyy*+bWJyo2+iT+hp)KoF*F>%+e@-+agX?TTQT!Q)jSR z^g4^%?W7Seie9zb>M=NNMi(B#^=_BVN*Exie%=dWS4I!~f-w1Dwx}ZCi=wuV-DB1{ zTn?wrY%rOPZmaC@>zTd&_Lsz|%-ixI_S$FIJiS?tF|)~HHd`$=3%q8w8Lc{#-*c@? zu-sTef#kW?Mc8g6g63=!r>K!yE`!9Z((hnP*Xw~JY7Yyu1>mr0Mp>Tx0U=?_Q5G4#`R@qGW* z?Pk59-O_f5L)6%6IP^}p(SQXp-)Z;I>>YSHV0U75w3+m7gTt(YQF&`0y0Am+rgqre z`Ow3HMcjaZ)YT{L6rmR&m)9XxAvWiRax!PDn)Udtcl$$&j zHx^l|!QjdF7%W!WyH|Xuk68y<4vQ0Ja$239d?laFdc7WRlnf@F(SX3zn@lJ>_2Pck z=LQjY-H9Otr+TkPX`|HwCHY#TwNZjG&nqop|AP{8W%zF;;6-;{zETGM>v`yP|E&mb zU}vuntdak{8vnURyx|WRacdpPsCvCF-;{4MVOL|Za`-gZIuzQ$h9)sDk4xhLPW$U zQz8E79;dhHU1q*K8?i6Z+uZ*BN*^88e~T_(Z_-&TcDGS^K)~v9jY;^1Wop9pDD~$W z#8qrSt51ST^q6hte4`1f*sx5SOg1P$2irw-p?CizKB=}^oY>{!=Leh3fOiRYn)aqR zS?$nq|6r$L_UQ1?Zl;gl6bBZz>f=DfUS~pl9k!UK(4z5T63uE9b!rS@HyX?yn=#+% z!sdtS8u2TF+pe>DEEXdkdmTELUWaGpIrru%lQ9`>HWS|0;Dv_~zw}`LAa9HH9*5oK z!oJFE!PBtLns4$L^$ri7FFZQ@_@c{GGNBa-mfsNZ8%ofpP2$i#PK(82hHLR-o7-&1 z1D(7~UC#x@Z;203`?tlR)Vx`Yq27l?BW1lKo}>03h-!NOZE-WjzAFx(;SH2bh< zrKIOY1DW3w6Y0=f;;{M=?}^7)yxxS_n)EuG*^K8TgVl=nKmO3UmLSj!hu9-Ue!{p; zPnkg}e>alQOTR(nSw0b` z(ewpkbiM9V@o+kAc~=}v>IcOrTKTS+SbybT;;9(kSXO^LB4SoM8qzW17W}8n7IlnB zR~`Nb{#<~zbd1PUN&lxUdLOs#_=h~rKQerkuI&^NPqCdMVpTEtP@|c;cZ%qV|Dbvi yzf{n4TskiQ34czDZ=yTk7yNA6*eN1KEG?h|og#X4-CrOIGv7qJeBdJm>G*%HVxBnw diff --git a/examples/ssz-withdrawals/script/Cargo.toml b/examples/ssz-withdrawals/script/Cargo.toml index 0c1e0889c6..899e711e7e 100644 --- a/examples/ssz-withdrawals/script/Cargo.toml +++ b/examples/ssz-withdrawals/script/Cargo.toml @@ -1,4 +1,3 @@ -[workspace] [package] version = "0.1.0" name = "ssz-withdrawals-script" diff --git a/examples/ssz-withdrawals/script/build.rs b/examples/ssz-withdrawals/script/build.rs index 32b99273cd..03388acab7 100644 --- a/examples/ssz-withdrawals/script/build.rs +++ b/examples/ssz-withdrawals/script/build.rs @@ -1,5 +1,3 @@ -use sp1_helper::build_program; - fn main() { - build_program("../program") + sp1_helper::build_program(&format!("{}/../program", env!("CARGO_MANIFEST_DIR"))); } diff --git a/examples/tendermint/program/elf/riscv32im-succinct-zkvm-elf b/examples/tendermint/program/elf/riscv32im-succinct-zkvm-elf index fa06b8f184136d96b9f295ad85cec40041197f56..a5616d8bfc96fdc397c10f49deaa65ae4f1e5179 100755 GIT binary patch delta 297924 zcmZ@BYk*Bvcb{`-=3>xg%#1OHVHmF&#yhWUG4gKuP?R#IM0re6sZ>WIN||gduNYA% z)s(m@)fS>s-M(HbWqc@=YAU@|-`Z=Pd+#|j`oWyDA8W6*_S);U_da*?#}}MAbU|su znq}c!(M1Tc=AmYDvu1a+g!z|%1tKJbg@4B7)fVH1<%w|*?e1=8=RfmD=b-wyc5QV> zs8ec+N}MB7k~-Qci3tMAlEjye_*fO!9Fki&NX<(Uple}~GiXLg=^7hFSqtQe$9-uUk(~H?^ncZNcsBgqlC^Ej6IlK=pZ}Y=7&vzSgzQbCK+r zR`^SGEcFxBu#}k|03Ix53SyaS%coSNb}CYxm-#57kyQ9?b*RpoYEVV(vqKdL1XZjf zsNW`ctzURD3XmBoA3$IkYIyCgerBFIJ3!|&F>^7(8&bdUs~D_OGb#EGf;F{Pmf@Qp z-l>0qcU;L(E9;}v-gm1VGm@~B%IIIDzCwH{$Bh4rPnLm>rzJixF2z6 z(7z%s!~X*CX$CmNoi7xCpQAuYOo=1Txz(p?^VtE4G6E=iAzef4z*9z0eWZz1|I%>@ zcg){5u9@xUp_o^#OSxGp;tuZ8P?hBrrW-+f9#Hqli#%dDGdU z%Bjqf8mb_rr>!sWlFq|UI(tV^%;@~7W@itv_lz*4H*?o0cf9m09bx>7D7eMv)VIaA zIAXUXBZ5w|YNP65XX$LDb$}{Q?PlxG)ydQ$woX%B(wf^&11KAq*g#E5yVy^2kFx`j z9hv5X+lFP#Qxqtz z6^B&%P1UB(IevD4&S6#Dw3T&B9Nw?h;puCt!8?mi;i-BH;gL=;%J<=>ol^f>9iDS> zHF)B+v*RaTCU{~j3v?~-T4sUX`7a&Ix#Lh2=&r%aL?h83R2x=5e)it_5$dh`(6IgY zR~uHZ`In9;A4tFMpdxi{_KQgA*?Tw(utzH^$DIM!TJ7sqoo%{aHT>nAYCy}3T9UUC z8nOZ6Kh&x;=v#%VX>L0H-#xdJs&nujwJ$eIJ#{cSSQ)?$!dCiVhWjj3#leo5RPKB| zUC6#EiE}J94?PAdlV7PwkB-5VfVfud>8e88nsGmQOcnI(kv`Xy_iyd*qu)|a&yMN+ zEz{@LDs>;L$hItZ?ER|f3WP!J?(w&Cj;pdOhI2c;OO^I2JQ`C05#GLoNu?4N%Sm-GB%$PKDsM`4f@x42hDB3*;p@JB9D<$Y2! z3rLP8POohGoWGw2RnezSx-xhNKJwSejVk-R%UxU_P!;bsZ(I1KLYAf^Syp`2>Xiug z(JEb^P$gYma-8KVdr*Gx7_m1&74+>9tT3qQJ5|x&ovjQd^V4kSDwRDU)un%xs@VBg zu-G#AZ&C8-p&_dOxEUP~HX)aDsLI&V+B|jgmS{9_Mvd`=A zSYooOD9do4uU)b}Ka)|oXgd0fG1RHdDN>D(WChD@gW^IZkF?}&&QLYwNXyJ3gSvCh z^vZRo{QX3Cwe?6=rZ!lMCy^yzRjD7KLXTuIEVLO;DdIpBZl7K`{(t_q@6CAUVY>!(U@b<5>>s`zLW{a&hU#ApVob5zMCP15w`NX0(? z$Re~n(P|kab*z6@dP&z{Iju8GRos@Esm(m-FjBY6-_J=>rT3*ZB7zQL_4EE}(LjYB zEp$i!TNNB@<1(TNM7mhHNyOBes;np@7%|T>Pi;Nc$8G3L)b>W<&ijIF4lr;V)s(91FU^$6Qo~qomGU!lrFbhSd<+2~FKK04fAu(o=5$}Vv ztih^lkE~95kRNqf!aS^I9>e>oY!Ii>Te$u zXt~>(j=_#uKdhRJpgHStDt=Ivqna^2&Tg1#TP;Tx5Mw4IL#s;LlYut45DiwLEdv9i z3FyceP(jlB3<5prM@GB=r)(=KhMOQ1u<|pDOl$Gj^vWYg{jKFb7!$Cfg7`3O4OoS( zh)}sDMwGq15ptz%m7dQ-!vqv0UQ#OR z;(L_tD>wv+E9hcUh(lEIw65n&`t1q@twi^R7#`QCF;2<7%@{j$Yvh;i!gEHc;xC)4 z$M+^@@$FhC z`?4~NX)&XgJQ9~ru18gNGK=xjP1G)gMRTURqAbU?B;(dco!NJh%i&a2F+5k@_FAU< z-i%Ztx9g~Oz1GsDwY}0`HL5@Utr)YZiEgJ(eKne!psp&pq-pBAxabb}TS=h`E^HZO zVf;cx_D5y$2csN^l5&(NjO$+Z_tU?`gt76K1~Fl*FigNKDbD)Rc#WKu4&F2Y!*ivE+TwtQQXOtd?> zShh%2{AaYf^*b3XAwxacHPj8=DANSqta@2E_mZ{VJv2kTU6$<98zF1WW4>*yHBZt` zpS5NlgvnY*Xpvk%)|$(ojazH^38Ga+4#irs)+AeEKTdVrTJx|^khP{~xq_^90ZrF1 zpS9-t9b~O}+y~KG=bxQav5HJK!(S1XPqCRyHp6<9Og6)MgiJO)>-$hBGcvW&lj2;Y zCvLZC&c!XHCyAwc9NFzsBMV{@*=^Pth`YybQ$J^F%x*izX^Goy275c%ZFiH)LVOg1+iOD4ONIM#_wHerUE!wYy2tB_*bjFqxbnTY?)=^8bv9JmWGTW~q|4 z4?t~pb(Q+_)udJ(Ga09Rtnclw7kTQrRvm-eY~vyCP^VfoWBf&~YS6kz`bgu}23q<1 zI3aa)>yGK2O`o|_tJF1CTU%$je5$D;2x9_y-xvGa$yO@6&2Vn#{G(>JDRlXktaO_U z_c>Elw24kbLsh$NMrI{hhdC&v2dltKRkH1Hu9rKJPgNvHp8?s{%D-@r2`>U@GTqRL z7$Z*3ZQ;5bYc`6xsk>2Yn6Qcldlkj;OiZNd}&mTJ+iYmh`yVu;f&l@Sm-5W%p2 z4E>oZZPzA!hGE9sxKqv(^R0Wav?h8>TrW0V=?5$R zr<|ups8{nBCubXR*1zM>3srIVRH)hBDoL&&HjT$ZM^$zo4Ij5ht6fa-?od^_`Qcz| zGRd`6`T0@ddQOeo;!d)7R?Xhx3aGON!`fc{(dBBT3pxhhBLN+`zZQ z+@&iggMF7O>DV!S1Cch#4@uvz^y3)%kmA5dd_a%%Z6un<{OvHJD<3eN+v#b_=~T$i z&TXow(8bz8g;nT^roLBYZ|&%c>^-We^FXzBYq~qm6t!z>emYCt6|r#$2YJboCtC)2 zHv6c&C%Xn6vTvBH?UI^VYPc#xsI+$ayXoPov`ZV8#IOBz@=|r^Nf&iz01MB%$}2q5 z2#+p8uyNbT*jz=zL(k4|6rRpjV>GfoTs~kzp<8~_31$}d6jigWM1+%}Dh8#x?Joi+ z(>i8tQx$_31|6cMiz*qik_AJ&h?;M#X9pne(-DGB8v1noRd8ZGm3>Pc7i4o)JSxL| z&Q{K-=BoX$A|+Zl*y zMip6*YbY_w<-bs3G>1&&hcQJ;b@C`BMsvu;=~t!hTS|;lI|mm6CPs6}s`vD_6TeYn zl;K4vF-p(kFeOI$`4lBaxy@IU7^P=@oD!q-?BJrn#OMY}j4t<&p?6SXl$GWxN{q7P zK1zwv3bS~eyHHl+iBTTw2}+DI-g#AEhAA;h?ZkRcjDD@WMx?+P5osLicnHO4zf4Ai zyFRW$4|lQyXDBDiqb?yU@*Z*PR5f)#V8zXpD&_X5LNHaz5^{o4rA*O5N|j2=d!<5l z2kWZ(g{Pt@LN+-_H^9;k)^K&vU8(R(2kRWyOPdX~3#<(HqbY;5EqWLVr_Qv-bg-HY+==0U4*AeTL6%J`9y(tye& z?t)VvkwZZo&9bfm8#`mNtC&=31E}b1rDoFH%0$FJZic8QdKLxOrDm29eGRZa?h-NN zRv^1rW0@Q$1Z7>UHZE-iWT>c>%p^lqLPMT{#$7Rg#o!Z+-sa#D#Y08Q)triGa2)b&LWK;lHcP{ z9wz@?RlcibW&x4k&1cxC9`|mH-xDzeh?kInxZlI|uakMBXAvgzMr~z+&%AN{2dZd6 z2i5N4=I%5+X=F~_esNUfo>!F%FsOcAg%-B8i#pN9+isI+K6h(2H-jLnU>gXcZ1H-7xUHY0~2-T_no}qp`WNi~Y zF^hks=&8tXL;j`8&ZIRWhX>WECwSsfYzm&p?ga){fq0IJba63ue&^sRqP%u5M8Oj( zC{OT2U}ZYlJtoSg$a{iuE9RzB2*pExtxEc~Zz4?4{cc>rxYu6amJg(j-$#9GWQ=VMhc(G?BnBULo9Bd4pytEejC zc?TXtt2Gm|f@MZk2y}lZ;?|g9BD(RXCbrC!Bwm*yx$zK*>g6VtcWqQvU{cDn4a4=% zsjIJbVW9_6dTqSW71w$ljLhYKekmp?PQNyOL43a#{lVlb9ltr`Y=KLLJ(}_CW zpR(!O%i7quhg?yH(bDiG>pP`k%GkTnO(f`UlsYe>jMdGQI_L6^lsXTQoTHugg#T18 zv*M|9XEl-@H-lW?7E|YVjw+q9=A|UoxYO*}q;td!9;$G5Gw?;Q3t4OT`p0>eUc?snL?nVOQ0?1H)A=^mvgQ14m<0b)= zUs5cnjV~hqi-g7ZxEae+XdlxWk=yVGR>yPY4E7Jqm18J)g3{zvttzex?k0nF*1dX_O%^H@NBVFhjo9)>mNea0raZ zwMMG^Em`n#u9eJea`rqkmF4x3x!&ND;18_u-Goo6QD!5C2RJ28nvNu*=OtW++WyCvAFmdJF+5SpBIi_j78F2=79h9}TQiHrCN5HPO=*Sls zkm6Fxfpe=ITogO}P@VCV1E=^e5O<&n9Wlk^z>~S}71;M_RoSi$2MD-@OUHA*QC@3Y zNuJ(SxB@o&hmkYM8Z(vS$r{r>#-0O|2Os)#Ee4AxI89P>gPG#~8P!ZOE7W#SnTNy@ zFg?L!!r{_GT*|}806qT0Zw~sWiUjh`7L(a`aIi24c!tQuq(N3468G_ zZS*X0qCIXKm5Hpl+ZJeI+%_&wC%0`I$!uI}Q=Max+eS(4{_)*puB$_C8$Ihk$Zh+{ zxFUPrt-`y8y1`#A9CsZ{Vag4T$r@I+d zOt9b)F7EnHTt)(~k;leEheKdTsRfv zu?Zs8b5;rJCHCr=7kN*3`yDLG9#7$g5*r?smEy zO6#EJW(ZTEybfYVFZwz-T*vC?_L&GR>RMCzMGS`(b*-$-B4h8InTXal|8SxQMC#%Q z*@g(&7P_2c^|+9{4hK(ftlQ*o?c~pGGY8#0JXy4KOJh2$fZR=)kK27TZ*n*iWWqEr zK|NvDIZ+x!3&;*xgIyZ>K}je^LmsRNVH&7_RN)TLAxtnZb*Ye0&l;S=whm*@bqi6N zaD=0XiR(|1HgkT3l6t6ZxK{^QRL`2j+k*02Xiy*FQ8V!sjHz!;Oxw3YA)+Zs{Veu@ zDe9>K@7K4kAS@L@~yMM%JCoaGZOAIPgj6K>D-&UhK2Xlkbt+~K_facU?qUiqq9^kd~50(j2sQeLLB6$1Qm;&6Zebd@F+!)guH&A^igF^ zv*>>}`E~Ws!Pe{~>MJR)PJs1z%B$0}9OBEXQ<)e{dG&xXMRPY%UY*PPQ(pZiQ{Ml! z7%!;K$)~*f9`dT*t5Vm4^6J!1=TcssOj+PMe>*vV^6Ct)G3C|iS+=IUIzQvR6g+Uu zZMsrkou18EQao@>&l=rr%&YgOy!u7{F+_m!>MR6!7An%q`jIl~rKHjEP^%}S&ZGQF z8Fexidv2%#ErBxX)J}fOcIpe|m4FCI6>hA1GU|+QGD!e;{e>i;KY4qPQCgjc{@mE9 z;Cp1JLL>&SQWBkO|DYr~XE(P|65SzpWh5ohD@Y8k^lF1{qz$<98>9{R`2cAHdKTM! z+JMS%Bcr`rKJDv>9RvDFk{Jm$5h;Q(keIV=8dOIBk_a-At~~4&$W+hMoLuZ7T5mC9<&L|BXo~#!ZPB`eOYTN)7g}@ zrt|>bN-(?iT%JkWv6bYte1VoTo{D1FLCRWdX+8J9Ee%B26{G39&_4KSmv|CTlqAo?~^elf-CHtGEE<+zH zp10=S|D%0cnge-&_Gw9&ocH4A*qlK0S~AF74CP zGoEEAKGx1UtSUcgV(XV^tCkz>qpjKsVnqoeT77e#C4LKS&NHy1v|meskH%9uxH&IK zZPll2b%Yej5V9w!U#6?_arN9Oe3onq!zd@4!Z@t<*%T_n{d#kW<(OGEfqrCDxO^$u zlnq9=>}eI7wrnzhxMPo(SjeXI?-i?~et1sDTw(UM-2W z=ueh~d1;c%@x5BcXAoJIW2D~mtH2yhmW6RWk9~`S%BxDsX^Ms**hi~$9jD6w!p)Zp zNQ;om7N{Vj!lQPe;D_=bfzPU`5uyU`^qOle+`e{2hk@pzWDz~~uGfH@P(aCT9$kEQoS zYzvJ0JZ3aYFq#8)_pLB{VMH)Y3kD`e(XoTNt#6)&Em9E`nz@N`rpn` z)4p$LJ4@Aq@0-}p61Dkz++84xdAOE4B z`#eVF{g~lCPg28vZ0W+fM$P)MD?g(T{@jma>oHA(W9h(dJ1`~U;0NAUDcSM zy7HYMouQWEGllu0rHcIIQjEufe*39S`bfix{%idGo$l(~)5G1-o2f;o+qf9^Q@c(_ zG0cnWi9P#ci8RKt0a+7T`{GlS*HzW@1ub%c$M}CvbzyhJ?ST=h)-U%aSDMu)`kAm; z=_#q|nO{nh%gE2h#0?%QEt)!7&G}UZNe;wn)FF5i?c+9IY_1jMHgPHu-Rk!_c*~l&@M9Em<_LA$B9$yjli(S>@#YT4 zyktS*u>#-C{f%Y8a`IL1)}E21(>_TmHBDuSs@&XNo%3Zn}v0q{#C=IE-qt48ngh|lX` zBt9pvM;NB!QA86parws>H8p~PO|4LxgZF?o(m6VTbXVF>K$}_xDpRRqOPK6@ixXzjp`pc7*j)3 zj0b>?7evp_Hj=Q)zs;o}OyzolDF(L=C9G*f<+NTZavHU;kRkgD)2CF{cfTi2?l~F^7#FYqXKKK_WkH%|%#x9z`c-*d9>*9e{ey9N0_gIyZ$tJg8J`m2>W|4X z(KGJO8CR#w%$Rc&XDqHns2jKIO|C_L<}1EwG-puaG(3)ZnKSUqXxxx*k0&iBS zyJ*Qu++;Bz@Y-bFO58LuOJMF9e>3MYHG5@`;4zBR@GjL#{IUY|>7-7r?AVH*`^I9V z+S?l=>hU8JTz{b&u*w|^W3iG|__Yp#HyO6#xo7p#s-hHbSP%o$V0&|=J2y}J+kA{9 zp1!4Kc#gPqawB!)>J+}%SJZa`~VOzGv9V9^Ha zCO*{YNT{(9cQ;9d--qjg8Hz{D!DeK@kwYGwr`0k^`xJ!*BgAaJeKKdtcBltc@6 zQRf6wlAcKb;)hrXx~_c$(i_!EgPV?7dG6usOT(LwSv9R7HIgG>=W%Nolz(8gO)E6P zG#W+=H&Sm1KryM+DNuSoUSI1D`brz`;8WBz2})i;XYJ2Dc5YCc5`oU%}&LG%&m3F!A*Sjs#4&<5NnC8N5Z(F)`eCsY#oZ5@IhT$hJ2!uWbdBd$6T!y>~8;4uFnaN^Nc*+QChHV{(iXsay1Hu{nlZDEE{D{r_~hEW4P7p>W;8>GmA+t*7&gu3&3iv3sn~7em>XGdLTR~G=yJ-O zUy09N5v_?^pt9UL8sw?$x4h751I?bb-?9^*gUV;^8-m5emWN={HhX>&Js*M7+w5j8 ziz3kYIs3|>BuRK0?s?AM&Eh8-!m#aj5BH@3EQ-H`;9&fvHq_n`YgPk>?Xd9-9#NP8 z3wGEY`9)1Si9usxbj80iO~GHhQHtS~OIY#koA)1GPv zvuQcygd;E5Ed%@}E5m1Avfs7by5sQvD|WLSYG|x)(+Zw|c^@P5YNsSgykKsC=p)cj z+xeGq!^7C{Q*QV{4Q^N&ZTJaJ(Z^i3uciycVju!zgmoWrU1BoVRk;1+M^L8iRCj<6 zaDex@;m_vu9AXlQ4)7ih@L#Sg{FCcMbO4hTinxQn!F5h_fCz+k+by8H9B$T}8}FUTe5!~^{sEl3?7QLf^;RLIFAH{sk`XrE zxhHLL9qbx`!bgixyaZ=VO@)a;WCjen(8eQ8B)qARS7cxAe)Oh6xU|T=#D+cntXx;= zOaM96x(WWe$g1t~{+;T~a30t(+QKg#@ah`9{7vgR_@tomd3Kqg?^!utVB6=y{aN<2!E(|s zt6@MBdm69k)v&V(a$6Vz#a{TWi9Ock#z7d<)LwR3C1E!@u+)lm)j>eR0royn6(PkPg>lJoGC~s-E;c9s`RJ24rDTovAz_9W5gz)XT zb|cH}J_wKQ+Vl8D_l3w*DdzIV42~Ca~uXdj*MZ$a1U&K+{T1w30hXc`JCquU?Kr=g${G(8s%Ps2f3dCY(_)9f}) zS&0_}^3CU^@yMfis{w}p9T=9F4g;p!c+8TtL1&zN^ne^%4l|%)x{Y63A<>>dXe1ak z#vgFIUIh(GY&1Y5cunCJVv;YvI6Ndwoi_c@Y_86X;nsgxUMh52P2J3{yU_dhkk-yJBXq zUe#sCqYUz(Eb5WP`@0w|UZLNbP-CZqr?JN4pc~L^5M~#E{0N=s#Um5yfxOFZ(!5;c z)Lt*To39%u?Za~q78)iu`e0BAvFIZUn*D*HP=x{H+y_txspK5F8TdqkO4cU2UFG@(@?u99N=#?;)=R;AxeG|Xv zo^UYV-p>0yq60>!`02y;c3Rz#03y-ZfJ)*WC^+A00Fz#`2M0@tB{#y(*X%FhmF39W z?CbF=H8Hh{Gf495^x*kndhn}a8_@EUjkoZGnSmtp!I@?M3ELh^>Ar^j?#DilnzQ{k-*c8I-q8DK3j{_+G2241!jAT-#< z9LH%?5AjS1!(R$TgY8eD``gvC7t}z{G5X_1`1*0HUp10{iUUNFc`k48kleY@>bY#R zo$ba*$Ck}T-%cCqb;Yu+_CxM>aMr;9#LIPA{OXWlN_JTop<0Fu7u(J`EY=|-TY8q^ z#yFE>$%2*RtlmvY%JkDF5jUYxSJdHdPLieXDL6gOx`rD$o2XI4(e?a|#A7h)a%(U* z66>i^gV83IzT zyi6>Ff^O(^(8zKY6m_$|auaT|Kz6rZcWcIlL+9EpEv}Mdpmz^+-kGEe;Xn^;CkXeo zu%f4ZQzq5uo*3NpRZ+aTbq{FW3)w|40%O=-7+r8p9{kqJUdAuFd3b4W8?${3s2*(W zWA{idBOP!L>dGe}dpG8+SRh`66}wS=my?RA3ww84FR_Yo9)Sg~TCa1B^HF%r9_u2D zb&MPe<$JACUKjDRT#HePL~L3@Huu(!K4ePDJXvW;qV3uu^xaUYE) zH^QtW%#{&Xk&8z$uvrB$=@wWN#8`)FWC}E{5nb9c1jB0Bliiw{u&W08h}2B~5#CtS zZf3bvC*fc%`^vNCI?D}?I_L^Ij~*dGPktE_9FhH~(+=N;5m_1KOd3Pu+tCH4xfPM{ zpxf<^maDm2fiv5l3oq`srtuug_n_c_H77-rAlyXG9X;!rCg5)lUmUPjv#oI^nW#UV z)t)m0Jr5dAd;$k&n6V86xhPzFrhTP5oHzz&;1l*Uwt5lBh&O(IM+<*t`$jNuK2k;N(7(mSU>z37cO-ljoT6#KSOXzcmAT zO~Q-|*;VIbHt887?T%IRL}kRs?&0E*wq>~&6a|{|o73j`Q>N6=Y2q@R+5ZJGeC}%d z5tr^A;k-3=p$kXug;@`yXmHzIQ2DU^vzt>m2B+5ASsl3Maa0(+RpOk^sCaCkGG_~x zb-=RT@iMs?&Ru6e3!N4Ay_@Be~P>(T3DD({5Idi(CP z6Sju^8E$xWRAWBt;+q1aMx($whS{P4>>X|QaT6lFp~l6y7P#L4m~=7X5h1}@W>O_R zVE85WFm9{&K-ndBR(EPEI#kQaP`QIAcdO)NxP2a+z61lWVw$f;(0B}ncU+SL_l&Wh zcVE(Bz*tn8R3qz#G2`*1?RrXW;GS{z*i7#9nJ*_pWtc;zoD4Vkh;uUZ;=Ii{8LoL9 zT3lfyowUSWlatxbFV0TL8;@$fm{{M^q+=d-U-F=Gyq(&gY88`i>Qt|HQccR{R#zqX9n(@`&0eUeZ6C81bAoOBEp`SJ7uYS?Rrkg}7;R7w z`4pVFz`h^Chm$%&!5Ca%w2buKP%;KJH80P9;I}c>t!^0b7t9)qUk(yxJZDFE^H}Q{ z%zM$=dj*OwL&LzdJPR$xp{Ax6iRY}we{3R(AyreD4#64AF%zMLmj`J>DP-hLA2s>j z3t{>U8zZ{&6B@#nvp9FCf(o)%$1tm zEOIN|1enf)ag#7Mig(E-&4dV=y|3>-u|~jO(jLU|oO34(>t{>|wb=$+`=Mt z;eNQ(iVai5AQ*OjbR$E*4?EAtX2cYE8cv>XZ(+Z|SrcB--_8%@6ww^uiRB}2aR}tu zI-)xHA)FkD+a&bjL}0)L_C>Y02DdSeK+{ia<(nPImay<0%W;)jBM3#TtX7qTYfa2s zBp$0}@)r8s2~BE^KsipNY!6Md9u1=+)~!R!Xy)pe#uGvhw+syJmpH+`KQN(2a{X8b z0x16?fOQQ(CvQUIT6i143(y%14c|q{BY=(tE8fM~pq}Cf*!3>nlBIEFA2|Fjx(FqN zlwD`sML18hhG|yhJ(%>;o9$8{j3~% zlegh={mu<3KS8~W8w^qa*If%GA6Ti$^rCM@$K#vj*J8|!L61M0K>fQXV#2xfw8du$>If zwYc9AA|?o4Hea?6X2HQ*t%fjek$tBMi zvq>z7SHad;jdKN@ioaY6c@JSTnn~Fgu6_uGSDQiQ51=2yr6CC0`@?xl?9oYl=>%8J zf)(~1mlc?H8b4j{wBXtE?Bh|LFhAtboa+jI#F@pNHQYU;I@udDfX&=GcUup0%~a>~ zgyNN`&3OR)sEU)t4Ly5&JV19GAd~Andwe`VR~(?x^3~{XGMo+nu*24@PgMYKJUrqv*Y`myj;KGx>VYYiZhNSD7aEmQgzyij*zm)@-Bkdem zH5s#&RW|(y9Hvgunfn6%xYup~myWV)+cF)BYGb@~wrmx3ak_el7Q&d$scvh3dXHM` zCLTKRjyY{B?%!zN<|aDpz@SI%Z(Z$k6nZ~~Q=Dx`!Q&gHkD;qyK)U@uFl!S!OT;>- z99nF)e{i+_dT6}Gz9X6E15aZ&{RtxXpgz+y4a4B-d3a2L1YZQ;z&!I=5rWv*Y(Hc` z)_kj>yNb)9_k0VzGt*H%7+y2qLbsoYkdxs3dyRQFJ@xo7Zae%Ct&-6DDLXqn^F9pZ zF5?F1mWh&>(`i}rIjBA6Q+AbXJ&y%tpp zy%$-1q4S$~V5Lf$M;a8JzOLuZ_ypZOPJb?hTFP8*X%{8Hp963Ydd9QX66T#)2er4E zOaFf%Kb$0(xebE`7VaQ4c+Pr@;}5YOPCkceBpS+j8RYgTqr?uV=xzN68tt%pxvbj? z<96Wo4Yd^;!zXuG`=Wfj7oOXR28OWGxX1Ur^#Q-&Znl~hS@J!3|lBPWGA6)1MVT>26!Wr@DEn^3xBZrn29)#^ICtrjn3qjtE@rH zDe(&Yc9k`eu)__nt0$m*@q7x{JHZ%Q!r%;)0=g0PuC~s&WLAV5Tw~S4M75z4?RDNn zYb^hKh=Ut_>%M}D#&&yKb=Sy(cnYM$RqrmlK7FJbB`7V#3krH8f3UA4WTVNX17P)>5P0T%SM9(EVeM#$@ha*|Cv z@3Xu&iU}ig8I0+TV#4766Gk!VisszlDf&X=^P*KwH`sU{$^o})4NhNcpWCc443oI9 zxh6GSE-@j-3=;EDD)vL^Bd%14KE|uOuj)b}sSr(Bmk}5TxoQqUMNgJp?ozQDHZI4Z zXsR$JQv+}kN&e(#FbVKCYKZWU%^czZGa_PtxWNjmp5331WVXZ^JA&)l3e!$(;wR)2 zQJuyw8Xdv#>a2AkB;>H!eC&5t{mOE^hv$_kxSxY@|0FV{kGm>?d)-J$_&)3K6w~KZ zF*8`jHc%tyK{^mZ&w7lR_RHPOvi~Gm$dK%~=cBlFKhyduH|glN3e;K`d$AF1SR6@9 zW5$ny08h?;5gz}NMuwalVb%jyd;0Awv{PFjz%Rm-kqqyI-Va*c_(!o$!K??-yDcTD z3xkfm$Zb$#F{bnhmi!OQUhKjWze4$9>pbd?k;Cc57}pV8X9c=p)>S;<0$5XuA5SD| z-wrzuS&b|{582La#((CMGW^9P zI#C%!DR@5K&fTl$^O1=t1v{bQ1rvVxeGq2lV=gP{4fkJh_h^9eZt#2;DVHIzW)phx zW#&cp2=Cftb+BO5APliyuWyfWl{n@=Q!ocwVt9t$Vo3`6k(K08ybqgG@DN8a+2kY8 zy8-U3F=89Sr8b39}j^J_JCI03EBre0D+x9)07Qfgm&R^iYJDI0_J-g7Etp_U(9JAy6X~ik`Kz z;rOj+RN(e*(pK;06;f@WrsgyzrRm5V-@xaW<)SA>mHzD>pMR zEqwY;YrXAWE_oK#%&`{sC%VLos6O68KQDT8u~SM?32r?S&CjFYycw^%#-zpEIwy>R z^M>(;UG-5VpFz`$>zac1sK3~$YQBM5$sw+c2@?MLl<~T70iG3oewEe54UhK1=~bvE zi5~(_9j(R$cm*L@6YilGlE5M;UyZAiA^j5mZMAi|-Ct9?A|&P~H#jgy#W8j?+mTe) z2Z{O74G!XQCDl2-aFta;L7_FLDGTtNxw*JcvtnRo%sVbNvxHmokwR->Q+~Ob8Z8|d z->0E+c@xYUX!Ua&m2jhrll_q7bT~B7x||z{$<%21z<|Gzb8UFk1=dIlUYu{^!D7Er zX72AWe6=moFXAp@Yp;vV)|n@C#b}rsi?t>iZVwahv|o2m$dTybnHx80^0gbxE`o|r zQOqMom~{n=I*dE>EG`$pio@su(_%)y=Y3N{REs~M;b$o3tTNt&L7(9D|V`I~}4988l@l z*W~-N(zFJ}DK`0pkAp6%*W|Z^hZop+95g%ULu3IeB;tY|2Mrb)Uy>BWb{Mq~bs}LS z>cPo{=ExRN^mTaDefE16OsE}rFud;|9+$Oc5oEt-Um5=WZMz2M^-VK<50t)dpMPcH zVEQF?QNtL}i0AiR2h%UHbNK;J`H+-E2UkSUz_`d?p6!;)B2RhviHJSJwsGqNQJ7}g zNN=@)#R5+U&%na*lzRr2HT~t$fpySR9`5{s8CbqzXrCCad&mx0tPRlCdQqq}v^ae| zT^R)~@9ru0prEzCJc@#R#ZwM1er*2;52OW3q0gu2#Xp%47yv8H(*q*|v)t8jGlUuj zu7rmU+pQt1L7+BFwE|z!FNa!qy6G8up7NA4&gDd- z_XohS9C4;{G1K2(y5;EWIA7YUZ09a0sS$9GD~MUJ^bZVNG>PF<=>2Cj#e-)GR{V(@ zXtV&Gc0^XNlm?y_mR2Cmsz2{dh39#QD(bI$fSwr`;-_kh2OBR{>pkUOs@nR?V^p>A zm&d5W4K$*vi%aY6jfI749vUeQGbZDxl;$d!p^+gp0nmgO-H>6Rw{q z<`uLaiajGT=3G9;Q|`fB{Lfz=#oVdzmq#%dM;LR|AMyFXGoF#*QOt28FRx`3bNN1$ zAGaU0#R`xo5Owis*vSplv3N70@Ym>6(5)Mq4*6JhqGXx}84ppiuBY5Xlmq_qC{bd$ zzdTBmv(%lA^&XT-0VuT^9~duY%Fo^lTj z;st+slm=&~zdTBV2)h%5dx1u+G1|Leb{Z}tdJ)e;_DEbt^dh%{lODj2;Tl20vwTKd zGbLhMxb%#TYOV0A=_6N2;h?PW6`~Rowo1 zOz#C&*?N|ts+*0MK~SSTX5-~+RA!gj0>6d#U)0V-hQ_abqC*fYA+>dFxcDdAbphq3 z>JuU!^$h7jT|De5_nGxR3=taEk5iJcOsJ7qADo7P-0&l# z0w?7 zVnviz=K-b_FYM7Q3T5PPleK`w54WdD{CF+~dc@CJ7!DmW;zw@j#nop?zZM%ZsnCPE ze%VvbsFQ*bgZ$-)I+Z&E{pE-`w=V?w0iFUXr3L;UgMLST!APGZk!vJNBE86-EQ!qb zzgZHCjZBGtMiT2=X@%cLXNQE4yVdrQS8h7U*&ei*JT9-|l{rx|{_?cvnPD={_{*c@ zIe&P_!^=T&@&xXWW#Sb542LoUms#IKm&T~)c!svY-o|(y^q1xD*v(*gR^aEf!jn;Y zfN0UXb6VgRUcBm?@OCpKs9aC- zmm?+I{#v|sgnDl#)8LS&GKEzHy~wLrMbL{gj#UH;Qa0P6B9fp9Q9E=zHbvZ}z0VGn zo5tF!v^_-WWqu@adI(9;)L$MY%E|JVM~M=R4N>U!U`Ev}Bu1ne2MzQh(m80L7j$AM zXy9r3z(bX2$W*18A9Q!s9CyJqMhKb)0~bWS?=m9HtF)OgE+67YG)CC_{_+@M|Mi#0 z2z%Eh>~k++AF_sE!VVe@aVh@r6I5iQwBg67OPU4Hm3zx;oXjV_m>kjzOwtOU^by{& zh6fK1JyLkeJ<{ha^p{8J@dek|K1z=>pXqUwhaTKpp*V=Ja^~<7Dj~tVofSCO^ab4( zDRb@)mv;zYH1tY!{Ixd{_TaC>emoug2)vm;(a&Fw_*1zrGH3j`JzhZTX#{O3<4;)P zWiP^?Uhos@6vxqv?CilGGXSIqBn{lt5Rrtb3I8mVno4<#2P>w6%cpzFc@`Mk-~8oK zD#Wk;a-0Qj|1(qJ;8CV}xLg?VKVfG*^njS8N+_<6&M3X;uVGhxRMI>PPeEie<`xd8 z1n{fCM9R0}Gbw@Q)?J0CqCy4?1T(SYzwo&QM22YRLCZs)$nlhW$dgh;;Wax%iQ^5X zJ(M_Ad^1Ntkztjd;KSHBI8-jL@|Pna+`bref8$?I#k&W_zn;iM6w~6sZG^$b$wv3Z zIN3Z`8H|4c4TopNV_ps(@verySmhblgTGkfDd(ABJTv{}QT%m=zdVXR-tnx+V9<%YFGi3~j45toMN>p6(U2yv0@|F#JitFd7Op)T^9!GqXIEGZ`LJtN^3722s zDfdvKBmVLzCGs7Ad6W|UmOB%lxHEz0pH1$DX9BPC(M;^|&cuB0OuWvLq{-~}tB$|$ zy2Kv*#Xo+0oT$WjvzJI$6n{P6-#&^zez<~WVu@K2&EWE0fsl*)eK50Elo07am>bL{;kpCew0!uWPvC>7No0;!SHWCfT?I>mBmEd7 zB~&i^`pc0LZr=w&-2%(pWc(1=+AYwPUqpX6*$qiy?9YYL?om>7CpgtTN{aIf%sv;x z>1>jl9^vEX1`_dTs+k$|u+18YCa6oO#myc(cxJe~O04We@vEYAWAyyuffF8jalj;~ zpA73UfytPcpzk96Ref~P-qXu7y2$mEvs^RRp7xhVN7qk!%Hh3B1K+{(ivmkw^teC> zx=srWbGf!2${#>R5ewxtARi1&Yg8p`$94GQ&$4z{ULUZn==2j?#7WOUUWBXU7m-~B zhP`sKr#%ZYmFsK$ZW@=Aylqb_tVgR*OkGHD70 z6H!R^(6_+Wp9N1{=7I0QQ?KxpGh+!K(cE8-jHPlX+g~2V6OULRp7`5a?F^!*y75CA zivkb3yT*+mZ<=x18hF?(4jFb&ZptUn{DGV_3sU@Ao#(~0gf8{qz_f6=*E{vna@f<} z!}F?UD@M!5E-fcqT0V!emtwTM4+CDtg+?gKx1sFisQic}Q1D9N^5h78?hrpTT~%Nh z$uti#UgWFidU+zMOi*khmV4kJQ8DC~xyY|~kzWO&hhoT=!lD}kqoL(ATm~6S0**UB zBTO>nM(@@^0nNbF@R=Ebx-p3-0;JcJcnFXO{0KStT@_L&7x~MP04f(n{&FOM+mC?I z4Jb+SGAO?RB?-SUL{isGsaBBL?qa=tLOoB#vHzde9u=h4xwwQOGbh}vxf5G0{ zqu7hxFlx5JJ|6os^DDxKW(R7;m|sN9?C%+oG3WALo^lW7dau7cin*+kfRAF1hro#W zc)Noz7yF^;=D-GPm(e$)-Lu4a75f^*p0LE9t*y8PUA8?DztSPBq&HpS!Pd8_#@L34 zx;v_2OXXs=zZ|jU_P4pBa<4J-XstH|GI{S7&j83xDD~N7*>8g5n-F_?(bGY0j$-e0 zHs1XU^b6o__)Cq%2w1Zv@Oe~dn3(50NO*~<;;uVUzOJVs0>D8Jjt zJ#JFmY2+TiAog~QgnVecJVrt*(C@@Z_{LqkZ$&*v%n=%QrdD_nV2&(GgCquf6WdG! zmtW(@DN2L>&R-s-L4NBmkJ6yOVH%v@p!{B>0q-NUE|1cnzkq|~Q5x{hTkB_{H0X`w zZH3={CNQ81!fibRc@eH+o?-|;;c4$-y7b3RMqAQk;14+x)1B?ibn%oiu&&%_yby1s zo<(9UOFawGm27X7vA27!_lrJpR37sn;z3+iNpBnMRL7>Rba}6F; zJgDo%o^oEbjAE5&C_9Q`y1#uCb&*gSr8SR+KJSRl)oQ2^zq%KDbwdESLP|SV& z@Pcu0=8}U`;%9gPG0=qWo9^Y6$wG3kYnI{}LvH+-e`OMy+G|QY=<6z*gi-Xx{bxtNYKAI`zF1(whzan{ z!+~Blo(ZbG)^Pp-7_b&22uAB}yntzFxB~{QGkIJIht>rixA8{%J!OIBHm-)vWpSNI zSj*iWEIe4t=RM^tDwXsb!{__Uk?B-kH7|u&bNjwfacN+sdp;V!x@bgQkf;xU0f$l4 z=>;#JoIH%8&NW?Nz-K7xL=-9_isMk!r^DFK1C6>K=#JlZOG(@}UnPd{lmz}fA~h7t zRn0^(A(U7b6QB6)5-cwzjE@_Pq3nY|cR2ESV66-GGq~qSp!r?y?oYN6KwUj>;_~W& z6VqHhi^Vj111A3#IAUW8K5_$Oe|DXF z{ZgHvkXaV8da%aj)q^!gu!@0Ka^KDp(DmHY4qY0LGc?Vmobp#jSD5q8&M?_TzT^+ zMX908`4@Q;_j(Xvf`pMnahIpuOHd7ed5oYWe|e0cL@z;jR={Xo#=RE%F^nJ5Z+u6t z`Gb8&rs`#OWkwoTCUCRgl_6BMHx=k1L3j6~?~J&*eF!>M5W+WX66^yK@?WAwE1(sQnto&qmDxn6p*nV#c@p6MC>Q)^64 zpgK8~w0gZ+Mka^L$NSNXk>ky7vSjh}eCcl=Bj<#doFBd9e9eo4@vGp)!PD~zFAiQQ zYk6_>H;ZHLo&Lo^s0y!P^N=7K`caCKAlLiLv)!4}>-^UUaJ1<#}cV3r-{7GUyf8!xgP5;N2<8} zm~eIl?l#$Y7Qkd(gOqjM*DL(n{{oGy=mr2Y*lV}Es4Vh>j-it3FOQ+(wU;pCc;Hxu z>n>Lq3iMr`ZZQ2sARWIheD8@sK1BWrqy~vyA_V1?0sOiRk=z_AD+BZC%+DP3>Ta-U zi;VgD3sn9X$jvPrL?`WO05Qokz#uwl&*jBX`gNeEt$&B&?*pmuK#c_a45}GH)P}O} z1Kr@e8VN<+_SMDjgW@OnO@Ki5qs@fIi3vG&g221&wh1CsVqplsFY0Ndb75x9gq}kZ z>!$>>F~~@uK!ScDoPG(y>4Dc<&bT|o9#o~*czRHk1EBmL-0op!d=AbjgYQoP7hhQk z`czMF#|F%EY*RBjfdxJ@}_ zjhFuvNb|$?nko+!;+TP*4cX&^iSYc1KtuO-%WODw0!MKkgoa-P?z8bI>&7oITo#W* z*}%kfIPyiHl@Gq-O+0wuJFheDgqxfYo9s5Wa}yCjhjhFIID^e0owHA|e&OsK($9KE zafX>u@Z&bLAg^%QgwC*c6x}JxrVQ`$(*LLI$^)Y)mj3KydnN?Lz> zzF&9GZg!GI`Tp9SuI{Sp>gww1>g)M10@VI=)EIi?`=}Q5>glLO3A_>W`Tht8qDHjq zWK>6oFsyK+5+)2Boe`QZgkd)2X5bpt%Ak_pVF9>hm57A}5P2*dp9-@8yLpYw@EN&8 zF4GY+ zqDHp!m-EZ&J$`KLlkQ$}j>=-BMHz;BkHTSCR-5`YYp#ooW@AeJJ1Ratb*Be64OAge zl5!O0ChKdc+l6}WCS?8{l@t`SsIg&Ogjrl?9g>8yhfCsG*AZI~IJ{6@%EsoJf>6Ta z0AYeqQlucPx5EU1J-EV<)UW3rIcpz!d3a^b6FKorlO|Tt#qG3g;~{>ZbyZ!B<2iMi zCSkq`C(Jxn$oeS2fsr9YnrW_xY|S_PJZ=>Z