diff --git a/avm-transpiler/src/transpile.rs b/avm-transpiler/src/transpile.rs index 917b1155e35..df6ac3105c4 100644 --- a/avm-transpiler/src/transpile.rs +++ b/avm-transpiler/src/transpile.rs @@ -74,7 +74,7 @@ pub fn brillig_to_avm(brillig: &Brillig) -> Vec { BinaryIntOp::Add => AvmOpcode::ADD, BinaryIntOp::Sub => AvmOpcode::SUB, BinaryIntOp::Mul => AvmOpcode::MUL, - BinaryIntOp::UnsignedDiv => AvmOpcode::DIV, + BinaryIntOp::Div => AvmOpcode::DIV, BinaryIntOp::Equals => AvmOpcode::EQ, BinaryIntOp::LessThan => AvmOpcode::LT, BinaryIntOp::LessThanEquals => AvmOpcode::LTE, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp index 49a8b588856..d047e6c9f8b 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp @@ -82,16 +82,10 @@ struct BinaryIntOp { static Mul bincodeDeserialize(std::vector); }; - struct SignedDiv { - friend bool operator==(const SignedDiv&, const SignedDiv&); - std::vector bincodeSerialize() const; - static SignedDiv bincodeDeserialize(std::vector); - }; - - struct UnsignedDiv { - friend bool operator==(const UnsignedDiv&, const UnsignedDiv&); + struct Div { + friend bool operator==(const Div&, const Div&); std::vector bincodeSerialize() const; - static UnsignedDiv bincodeDeserialize(std::vector); + static Div bincodeDeserialize(std::vector); }; struct Equals { @@ -142,7 +136,7 @@ struct BinaryIntOp { static Shr bincodeDeserialize(std::vector); }; - std::variant value; + std::variant value; friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); std::vector bincodeSerialize() const; @@ -1768,63 +1762,22 @@ Circuit::BinaryIntOp::Mul serde::Deserializable::dese namespace Circuit { -inline bool operator==(const BinaryIntOp::SignedDiv& lhs, const BinaryIntOp::SignedDiv& rhs) -{ - return true; -} - -inline std::vector BinaryIntOp::SignedDiv::bincodeSerialize() const -{ - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} - -inline BinaryIntOp::SignedDiv BinaryIntOp::SignedDiv::bincodeDeserialize(std::vector input) -{ - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw_or_abort("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Circuit - -template <> -template -void serde::Serializable::serialize(const Circuit::BinaryIntOp::SignedDiv& obj, - Serializer& serializer) -{} - -template <> -template -Circuit::BinaryIntOp::SignedDiv serde::Deserializable::deserialize( - Deserializer& deserializer) -{ - Circuit::BinaryIntOp::SignedDiv obj; - return obj; -} - -namespace Circuit { - -inline bool operator==(const BinaryIntOp::UnsignedDiv& lhs, const BinaryIntOp::UnsignedDiv& rhs) +inline bool operator==(const BinaryIntOp::Div& lhs, const BinaryIntOp::Div& rhs) { return true; } -inline std::vector BinaryIntOp::UnsignedDiv::bincodeSerialize() const +inline std::vector BinaryIntOp::Div::bincodeSerialize() const { auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); + serde::Serializable::serialize(*this, serializer); return std::move(serializer).bytes(); } -inline BinaryIntOp::UnsignedDiv BinaryIntOp::UnsignedDiv::bincodeDeserialize(std::vector input) +inline BinaryIntOp::Div BinaryIntOp::Div::bincodeDeserialize(std::vector input) { auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); + auto value = serde::Deserializable::deserialize(deserializer); if (deserializer.get_buffer_offset() < input.size()) { throw_or_abort("Some input bytes were not read"); } @@ -1835,16 +1788,15 @@ inline BinaryIntOp::UnsignedDiv BinaryIntOp::UnsignedDiv::bincodeDeserialize(std template <> template -void serde::Serializable::serialize(const Circuit::BinaryIntOp::UnsignedDiv& obj, - Serializer& serializer) +void serde::Serializable::serialize(const Circuit::BinaryIntOp::Div& obj, + Serializer& serializer) {} template <> template -Circuit::BinaryIntOp::UnsignedDiv serde::Deserializable::deserialize( - Deserializer& deserializer) +Circuit::BinaryIntOp::Div serde::Deserializable::deserialize(Deserializer& deserializer) { - Circuit::BinaryIntOp::UnsignedDiv obj; + Circuit::BinaryIntOp::Div obj; return obj; } diff --git a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp index 4c1497a1dfb..11afd44ed6d 100644 --- a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp +++ b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp @@ -82,16 +82,10 @@ namespace Circuit { static Mul bincodeDeserialize(std::vector); }; - struct SignedDiv { - friend bool operator==(const SignedDiv&, const SignedDiv&); - std::vector bincodeSerialize() const; - static SignedDiv bincodeDeserialize(std::vector); - }; - - struct UnsignedDiv { - friend bool operator==(const UnsignedDiv&, const UnsignedDiv&); + struct Div { + friend bool operator==(const Div&, const Div&); std::vector bincodeSerialize() const; - static UnsignedDiv bincodeDeserialize(std::vector); + static Div bincodeDeserialize(std::vector); }; struct Equals { @@ -142,7 +136,7 @@ namespace Circuit { static Shr bincodeDeserialize(std::vector); }; - std::variant value; + std::variant value; friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); std::vector bincodeSerialize() const; @@ -1634,54 +1628,19 @@ Circuit::BinaryIntOp::Mul serde::Deserializable::dese namespace Circuit { - inline bool operator==(const BinaryIntOp::SignedDiv &lhs, const BinaryIntOp::SignedDiv &rhs) { - return true; - } - - inline std::vector BinaryIntOp::SignedDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BinaryIntOp::SignedDiv BinaryIntOp::SignedDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - -} // end of namespace Circuit - -template <> -template -void serde::Serializable::serialize(const Circuit::BinaryIntOp::SignedDiv &obj, Serializer &serializer) { -} - -template <> -template -Circuit::BinaryIntOp::SignedDiv serde::Deserializable::deserialize(Deserializer &deserializer) { - Circuit::BinaryIntOp::SignedDiv obj; - return obj; -} - -namespace Circuit { - - inline bool operator==(const BinaryIntOp::UnsignedDiv &lhs, const BinaryIntOp::UnsignedDiv &rhs) { + inline bool operator==(const BinaryIntOp::Div &lhs, const BinaryIntOp::Div &rhs) { return true; } - inline std::vector BinaryIntOp::UnsignedDiv::bincodeSerialize() const { + inline std::vector BinaryIntOp::Div::bincodeSerialize() const { auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); + serde::Serializable::serialize(*this, serializer); return std::move(serializer).bytes(); } - inline BinaryIntOp::UnsignedDiv BinaryIntOp::UnsignedDiv::bincodeDeserialize(std::vector input) { + inline BinaryIntOp::Div BinaryIntOp::Div::bincodeDeserialize(std::vector input) { auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); + auto value = serde::Deserializable::deserialize(deserializer); if (deserializer.get_buffer_offset() < input.size()) { throw serde::deserialization_error("Some input bytes were not read"); } @@ -1692,13 +1651,13 @@ namespace Circuit { template <> template -void serde::Serializable::serialize(const Circuit::BinaryIntOp::UnsignedDiv &obj, Serializer &serializer) { +void serde::Serializable::serialize(const Circuit::BinaryIntOp::Div &obj, Serializer &serializer) { } template <> template -Circuit::BinaryIntOp::UnsignedDiv serde::Deserializable::deserialize(Deserializer &deserializer) { - Circuit::BinaryIntOp::UnsignedDiv obj; +Circuit::BinaryIntOp::Div serde::Deserializable::deserialize(Deserializer &deserializer) { + Circuit::BinaryIntOp::Div obj; return obj; } diff --git a/noir/noir-repo/acvm-repo/brillig/src/opcodes.rs b/noir/noir-repo/acvm-repo/brillig/src/opcodes.rs index ad45c23ac35..03a8e53e510 100644 --- a/noir/noir-repo/acvm-repo/brillig/src/opcodes.rs +++ b/noir/noir-repo/acvm-repo/brillig/src/opcodes.rs @@ -198,8 +198,7 @@ pub enum BinaryIntOp { Add, Sub, Mul, - SignedDiv, - UnsignedDiv, + Div, /// (==) equal Equals, /// (<) Field less than diff --git a/noir/noir-repo/acvm-repo/brillig_vm/src/arithmetic.rs b/noir/noir-repo/acvm-repo/brillig_vm/src/arithmetic.rs index 3b8e8b6589b..81103be582d 100644 --- a/noir/noir-repo/acvm-repo/brillig_vm/src/arithmetic.rs +++ b/noir/noir-repo/acvm-repo/brillig_vm/src/arithmetic.rs @@ -1,6 +1,6 @@ use acir::brillig::{BinaryFieldOp, BinaryIntOp}; use acir::FieldElement; -use num_bigint::{BigInt, BigUint}; +use num_bigint::BigUint; use num_traits::{One, ToPrimitive, Zero}; /// Evaluate a binary operation on two FieldElements and return the result as a FieldElement. @@ -42,7 +42,7 @@ pub(crate) fn evaluate_binary_bigint_op( BinaryIntOp::Sub => (bit_modulo + a - b) % bit_modulo, BinaryIntOp::Mul => (a * b) % bit_modulo, // Perform unsigned division using the modulo operation on a and b. - BinaryIntOp::UnsignedDiv => { + BinaryIntOp::Div => { let b_mod = b % bit_modulo; if b_mod.is_zero() { BigUint::zero() @@ -50,16 +50,6 @@ pub(crate) fn evaluate_binary_bigint_op( (a % bit_modulo) / b_mod } } - // Perform signed division by first converting a and b to signed integers and then back to unsigned after the operation. - BinaryIntOp::SignedDiv => { - let b_signed = to_big_signed(b, bit_size); - if b_signed.is_zero() { - BigUint::zero() - } else { - let signed_div = to_big_signed(a, bit_size) / b_signed; - to_big_unsigned(signed_div, bit_size) - } - } // Perform a == operation, returning 0 or 1 BinaryIntOp::Equals => { if (a % bit_modulo) == (b % bit_modulo) { @@ -103,23 +93,6 @@ pub(crate) fn evaluate_binary_bigint_op( Ok(result) } -fn to_big_signed(a: BigUint, bit_size: u32) -> BigInt { - let pow_2 = BigUint::from(2_u32).pow(bit_size - 1); - if a < pow_2 { - BigInt::from(a) - } else { - BigInt::from(a) - 2 * BigInt::from(pow_2) - } -} - -fn to_big_unsigned(a: BigInt, bit_size: u32) -> BigUint { - if a >= BigInt::zero() { - BigUint::from_bytes_le(&a.to_bytes_le().1) - } else { - BigUint::from(2_u32).pow(bit_size) - BigUint::from_bytes_le(&a.to_bytes_le().1) - } -} - #[cfg(test)] mod tests { use super::*; @@ -139,24 +112,6 @@ mod tests { result_value.to_u128().unwrap() } - fn to_signed(a: u128, bit_size: u32) -> i128 { - assert!(bit_size < 128); - let pow_2 = 2_u128.pow(bit_size - 1); - if a < pow_2 { - a as i128 - } else { - (a.wrapping_sub(2 * pow_2)) as i128 - } - } - - fn to_unsigned(a: i128, bit_size: u32) -> u128 { - if a >= 0 { - a as u128 - } else { - (a + 2_i128.pow(bit_size)) as u128 - } - } - fn to_negative(a: u128, bit_size: u32) -> u128 { assert!(a > 0); let two_pow = 2_u128.pow(bit_size); @@ -233,26 +188,6 @@ mod tests { let test_ops = vec![TestParams { a: 5, b: 3, result: 1 }, TestParams { a: 5, b: 10, result: 0 }]; - evaluate_int_ops(test_ops, BinaryIntOp::UnsignedDiv, bit_size); - } - - #[test] - fn to_signed_roundtrip() { - let bit_size = 32; - let minus_one = 2_u128.pow(bit_size) - 1; - assert_eq!(to_unsigned(to_signed(minus_one, bit_size), bit_size), minus_one); - } - - #[test] - fn signed_div_test() { - let bit_size = 32; - - let test_ops = vec![ - TestParams { a: 5, b: to_negative(10, bit_size), result: 0 }, - TestParams { a: 5, b: to_negative(1, bit_size), result: to_negative(5, bit_size) }, - TestParams { a: to_negative(5, bit_size), b: to_negative(1, bit_size), result: 5 }, - ]; - - evaluate_int_ops(test_ops, BinaryIntOp::SignedDiv, bit_size); + evaluate_int_ops(test_ops, BinaryIntOp::Div, bit_size); } } diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_block.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_block.rs index 9c5eeec078c..f808bfac43b 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_block.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_block.rs @@ -1274,14 +1274,166 @@ impl<'block> BrilligBlock<'block> { let left = self.convert_ssa_single_addr_value(binary.lhs, dfg); let right = self.convert_ssa_single_addr_value(binary.rhs, dfg); - let (brillig_binary_op, is_signed) = - convert_ssa_binary_op_to_brillig_binary_op(binary.operator, &binary_type); + let (is_field, is_signed) = match binary_type { + Type::Numeric(numeric_type) => match numeric_type { + NumericType::Signed { .. } => (false, true), + NumericType::Unsigned { .. } => (false, false), + NumericType::NativeField => (true, false), + }, + _ => unreachable!("only numeric types are allowed in binary operations. References are handled separately"), + }; + + let brillig_binary_op = match binary.operator { + BinaryOp::Div => { + if is_signed { + self.convert_signed_division(left, right, result_variable); + return; + } else if is_field { + BrilligBinaryOp::FieldDiv + } else { + BrilligBinaryOp::UnsignedDiv + } + } + BinaryOp::Mod => { + if is_signed { + self.convert_signed_modulo(left, right, result_variable); + return; + } else { + BrilligBinaryOp::Modulo + } + } + BinaryOp::Add => BrilligBinaryOp::Add, + BinaryOp::Sub => BrilligBinaryOp::Sub, + BinaryOp::Mul => BrilligBinaryOp::Mul, + BinaryOp::Eq => BrilligBinaryOp::Equals, + BinaryOp::Lt => BrilligBinaryOp::LessThan, + BinaryOp::And => BrilligBinaryOp::And, + BinaryOp::Or => BrilligBinaryOp::Or, + BinaryOp::Xor => BrilligBinaryOp::Xor, + BinaryOp::Shl => BrilligBinaryOp::Shl, + BinaryOp::Shr => BrilligBinaryOp::Shr, + }; self.brillig_context.binary_instruction(left, right, result_variable, brillig_binary_op); self.add_overflow_check(brillig_binary_op, left, right, result_variable, is_signed); } + /// Splits a two's complement signed integer in the sign bit and the absolute value. + /// For example, -6 i8 (11111010) is split to 00000110 (6, absolute value) and 1 (is_negative). + fn absolute_value( + &mut self, + num: SingleAddrVariable, + absolute_value: SingleAddrVariable, + result_is_negative: SingleAddrVariable, + ) { + let max_positive = self + .brillig_context + .make_constant_instruction(((1_u128 << (num.bit_size - 1)) - 1).into(), num.bit_size); + + // Compute if num is negative + self.brillig_context.binary_instruction( + max_positive, + num, + result_is_negative, + BrilligBinaryOp::LessThan, + ); + + self.brillig_context.codegen_branch(result_is_negative.address, |ctx, is_negative| { + if is_negative { + // Two's complement of num + let zero = ctx.make_constant_instruction(0_usize.into(), num.bit_size); + ctx.binary_instruction(zero, num, absolute_value, BrilligBinaryOp::Sub); + ctx.deallocate_single_addr(zero); + } else { + // Simply move the original num + ctx.mov_instruction(absolute_value.address, num.address); + } + }); + self.brillig_context.deallocate_single_addr(max_positive); + } + + fn convert_signed_division( + &mut self, + left: SingleAddrVariable, + right: SingleAddrVariable, + result: SingleAddrVariable, + ) { + let left_is_negative = SingleAddrVariable::new(self.brillig_context.allocate_register(), 1); + let left_abs_value = + SingleAddrVariable::new(self.brillig_context.allocate_register(), left.bit_size); + + let right_is_negative = + SingleAddrVariable::new(self.brillig_context.allocate_register(), 1); + let right_abs_value = + SingleAddrVariable::new(self.brillig_context.allocate_register(), right.bit_size); + + let result_is_negative = + SingleAddrVariable::new(self.brillig_context.allocate_register(), 1); + + // Compute both absolute values + self.absolute_value(left, left_abs_value, left_is_negative); + self.absolute_value(right, right_abs_value, right_is_negative); + + // Perform the division on the absolute values + self.brillig_context.binary_instruction( + left_abs_value, + right_abs_value, + result, + BrilligBinaryOp::UnsignedDiv, + ); + + // Compute result sign + self.brillig_context.binary_instruction( + left_is_negative, + right_is_negative, + result_is_negative, + BrilligBinaryOp::Xor, + ); + + // If result has to be negative, perform two's complement + self.brillig_context.codegen_if(result_is_negative.address, |ctx| { + let zero = ctx.make_constant_instruction(0_usize.into(), result.bit_size); + ctx.binary_instruction(zero, result, result, BrilligBinaryOp::Sub); + ctx.deallocate_single_addr(zero); + }); + + self.brillig_context.deallocate_single_addr(left_is_negative); + self.brillig_context.deallocate_single_addr(left_abs_value); + self.brillig_context.deallocate_single_addr(right_is_negative); + self.brillig_context.deallocate_single_addr(right_abs_value); + self.brillig_context.deallocate_single_addr(result_is_negative); + } + + fn convert_signed_modulo( + &mut self, + left: SingleAddrVariable, + right: SingleAddrVariable, + result: SingleAddrVariable, + ) { + let scratch_var_i = + SingleAddrVariable::new(self.brillig_context.allocate_register(), left.bit_size); + let scratch_var_j = + SingleAddrVariable::new(self.brillig_context.allocate_register(), left.bit_size); + + // i = left / right + self.convert_signed_division(left, right, scratch_var_i); + + // j = i * right + self.brillig_context.binary_instruction( + scratch_var_i, + right, + scratch_var_j, + BrilligBinaryOp::Mul, + ); + + // result_register = left - j + self.brillig_context.binary_instruction(left, scratch_var_j, result, BrilligBinaryOp::Sub); + // Free scratch registers + self.brillig_context.deallocate_single_addr(scratch_var_i); + self.brillig_context.deallocate_single_addr(scratch_var_j); + } + fn add_overflow_check( &mut self, binary_operation: BrilligBinaryOp, @@ -1588,42 +1740,3 @@ pub(crate) fn type_of_binary_operation(lhs_type: &Type, rhs_type: &Type) -> Type } } } - -pub(crate) fn convert_ssa_binary_op_to_brillig_binary_op( - ssa_op: BinaryOp, - typ: &Type, -) -> (BrilligBinaryOp, bool) { - let (is_field, is_signed) = match typ { - Type::Numeric(numeric_type) => match numeric_type { - NumericType::Signed { .. } => (false, true), - NumericType::Unsigned { .. } => (false, false), - NumericType::NativeField => (true, false), - }, - _ => unreachable!("only numeric types are allowed in binary operations. References are handled separately"), - }; - - let brillig_binary_op = match ssa_op { - BinaryOp::Add => BrilligBinaryOp::Add, - BinaryOp::Sub => BrilligBinaryOp::Sub, - BinaryOp::Mul => BrilligBinaryOp::Mul, - BinaryOp::Div => { - if is_field { - BrilligBinaryOp::FieldDiv - } else if is_signed { - BrilligBinaryOp::SignedDiv - } else { - BrilligBinaryOp::UnsignedDiv - } - } - BinaryOp::Mod => BrilligBinaryOp::Modulo { is_signed_integer: is_signed }, - BinaryOp::Eq => BrilligBinaryOp::Equals, - BinaryOp::Lt => BrilligBinaryOp::LessThan, - BinaryOp::And => BrilligBinaryOp::And, - BinaryOp::Or => BrilligBinaryOp::Or, - BinaryOp::Xor => BrilligBinaryOp::Xor, - BinaryOp::Shl => BrilligBinaryOp::Shl, - BinaryOp::Shr => BrilligBinaryOp::Shr, - }; - - (brillig_binary_op, is_signed) -} diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_directive.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_directive.rs index 93c4b1a5042..26b21e918ff 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_directive.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_directive.rs @@ -65,7 +65,7 @@ pub(crate) fn directive_quotient(bit_size: u32) -> GeneratedBrillig { }, //q = a/b is set into register (2) BrilligOpcode::BinaryIntOp { - op: BinaryIntOp::UnsignedDiv, + op: BinaryIntOp::Div, lhs: MemoryAddress::from(0), rhs: MemoryAddress::from(1), destination: MemoryAddress::from(2), diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_control_flow.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_control_flow.rs index 49836033f31..116eaa5103f 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_control_flow.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_control_flow.rs @@ -106,6 +106,24 @@ impl BrilligContext { self.enter_section(end_section); } + /// This codegen issues a branch that jumps over the code generated by the given function if the condition is false + pub(crate) fn codegen_if( + &mut self, + condition: MemoryAddress, + f: impl FnOnce(&mut BrilligContext), + ) { + let (end_section, end_label) = self.reserve_next_section_label(); + let (then_section, then_label) = self.reserve_next_section_label(); + + self.jump_if_instruction(condition, then_label.clone()); + self.jump_instruction(end_label.clone()); + + self.enter_section(then_section); + f(self); + + self.enter_section(end_section); + } + /// This codegen issues a branch that jumps over the code generated by the given function if the condition is truthy pub(crate) fn codegen_if_not( &mut self, diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_intrinsic.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_intrinsic.rs index 3d0c00d8a3d..be262d9dee7 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_intrinsic.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/codegen_intrinsic.rs @@ -64,7 +64,7 @@ impl BrilligContext { shifted_field, radix_as_field, modulus_field, - BrilligBinaryOp::Modulo { is_signed_integer: false }, + BrilligBinaryOp::Modulo, ); // Write it ctx.codegen_array_set(target_vector.pointer, iterator_register, modulus_field.address); diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs index 36427e7efe3..fa99e968a31 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs @@ -53,8 +53,7 @@ impl DebugToString for BrilligBinaryOp { BrilligBinaryOp::Mul => "*".into(), BrilligBinaryOp::Equals => "==".into(), BrilligBinaryOp::FieldDiv => "f/".into(), - BrilligBinaryOp::SignedDiv => "/".into(), - BrilligBinaryOp::UnsignedDiv => "//".into(), + BrilligBinaryOp::UnsignedDiv => "/".into(), BrilligBinaryOp::LessThan => "<".into(), BrilligBinaryOp::LessThanEquals => "<=".into(), BrilligBinaryOp::And => "&&".into(), @@ -62,10 +61,7 @@ impl DebugToString for BrilligBinaryOp { BrilligBinaryOp::Xor => "^".into(), BrilligBinaryOp::Shl => "<<".into(), BrilligBinaryOp::Shr => ">>".into(), - BrilligBinaryOp::Modulo { is_signed_integer } => { - let op = if *is_signed_integer { "%" } else { "%%" }; - op.into() - } + BrilligBinaryOp::Modulo => "%".into(), } } } diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs index bd4d30916be..5c2a6bfacca 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs @@ -92,8 +92,8 @@ impl BrilligContext { operation ); - if let BrilligBinaryOp::Modulo { is_signed_integer } = operation { - self.modulo(result, lhs, rhs, is_signed_integer); + if let BrilligBinaryOp::Modulo = operation { + self.modulo(result, lhs, rhs); } else if is_field_op { self.push_opcode(BrilligOpcode::BinaryFieldOp { op: operation.into(), @@ -126,7 +126,6 @@ impl BrilligContext { result: SingleAddrVariable, left: SingleAddrVariable, right: SingleAddrVariable, - signed: bool, ) { assert!( left.bit_size == right.bit_size, @@ -140,15 +139,7 @@ impl BrilligContext { let scratch_var_j = SingleAddrVariable::new(self.allocate_register(), bit_size); // i = left / right - self.binary( - left, - right, - scratch_var_i, - match signed { - true => BrilligBinaryOp::SignedDiv, - false => BrilligBinaryOp::UnsignedDiv, - }, - ); + self.binary(left, right, scratch_var_i, BrilligBinaryOp::UnsignedDiv); // j = i * right self.binary(scratch_var_i, right, scratch_var_j, BrilligBinaryOp::Mul); @@ -156,8 +147,8 @@ impl BrilligContext { // result_register = left - j self.binary(left, scratch_var_j, result, BrilligBinaryOp::Sub); // Free scratch registers - self.deallocate_register(scratch_var_i.address); - self.deallocate_register(scratch_var_j.address); + self.deallocate_single_addr(scratch_var_i); + self.deallocate_single_addr(scratch_var_j); } fn binary_result_bit_size(operation: BrilligBinaryOp, arguments_bit_size: u32) -> u32 { @@ -481,7 +472,6 @@ pub(crate) enum BrilligBinaryOp { Sub, Mul, FieldDiv, - SignedDiv, UnsignedDiv, Equals, LessThan, @@ -492,7 +482,7 @@ pub(crate) enum BrilligBinaryOp { Shl, Shr, // Modulo operation requires more than one brillig opcode - Modulo { is_signed_integer: bool }, + Modulo, } impl From for BinaryFieldOp { @@ -517,8 +507,7 @@ impl From for BinaryIntOp { BrilligBinaryOp::Add => BinaryIntOp::Add, BrilligBinaryOp::Sub => BinaryIntOp::Sub, BrilligBinaryOp::Mul => BinaryIntOp::Mul, - BrilligBinaryOp::UnsignedDiv => BinaryIntOp::UnsignedDiv, - BrilligBinaryOp::SignedDiv => BinaryIntOp::SignedDiv, + BrilligBinaryOp::UnsignedDiv => BinaryIntOp::Div, BrilligBinaryOp::Equals => BinaryIntOp::Equals, BrilligBinaryOp::LessThan => BinaryIntOp::LessThan, BrilligBinaryOp::LessThanEquals => BinaryIntOp::LessThanEquals, diff --git a/noir/noir-repo/test_programs/execution_success/brillig_signed_div/Nargo.toml b/noir/noir-repo/test_programs/execution_success/brillig_signed_div/Nargo.toml new file mode 100644 index 00000000000..4bb9c5ecc1c --- /dev/null +++ b/noir/noir-repo/test_programs/execution_success/brillig_signed_div/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "brillig_signed_div" +type = "bin" +authors = [""] + +[dependencies] diff --git a/noir/noir-repo/test_programs/execution_success/brillig_signed_div/Prover.toml b/noir/noir-repo/test_programs/execution_success/brillig_signed_div/Prover.toml new file mode 100644 index 00000000000..be93fec5cc3 --- /dev/null +++ b/noir/noir-repo/test_programs/execution_success/brillig_signed_div/Prover.toml @@ -0,0 +1,75 @@ +[[ops]] +lhs = 4 +rhs = 255 # -1 +result = 252 # -4 + +[[ops]] +lhs = 4 +rhs = 254 # -2 +result = 254 # -2 + +[[ops]] +lhs = 4 +rhs = 253 # -3 +result = 255 # -1 + +[[ops]] +lhs = 4 +rhs = 252 # -4 +result = 255 # -1 + +[[ops]] +lhs = 4 +rhs = 251 # -5 +result = 0 + +[[ops]] +lhs = 252 # -4 +rhs = 255 # -1 +result = 4 + +[[ops]] +lhs = 252 # -4 +rhs = 254 # -2 +result = 2 + +[[ops]] +lhs = 252 # -4 +rhs = 253 # -3 +result = 1 + +[[ops]] +lhs = 252 # -4 +rhs = 252 # -4 +result = 1 + +[[ops]] +lhs = 252 # -4 +rhs = 251 # -5 +result = 0 + + +[[ops]] +lhs = 4 +rhs = 1 +result = 4 + +[[ops]] +lhs = 4 +rhs = 2 +result = 2 + +[[ops]] +lhs = 4 +rhs = 3 +result = 1 + +[[ops]] +lhs = 4 +rhs = 4 +result = 1 + +[[ops]] +lhs = 4 +rhs = 5 +result = 0 diff --git a/noir/noir-repo/test_programs/execution_success/brillig_signed_div/src/main.nr b/noir/noir-repo/test_programs/execution_success/brillig_signed_div/src/main.nr new file mode 100644 index 00000000000..bc3f5c3bdc0 --- /dev/null +++ b/noir/noir-repo/test_programs/execution_success/brillig_signed_div/src/main.nr @@ -0,0 +1,11 @@ +struct SignedDivOp { + lhs: i8, + rhs: i8, + result: i8, +} + +unconstrained fn main(ops: [SignedDivOp; 15]) { + for i in 0..15 { + assert_eq(ops[i].lhs / ops[i].rhs, ops[i].result); + } +} diff --git a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap index a6189d1aeb6..677772fdfe7 100644 --- a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap +++ b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap @@ -9,18 +9,18 @@ exports[`ContractClass creates a contract class from a contract compilation arti "selector": { "value": 2381782501 }, - "bytecode": "0x1f8b08000000000000ffed9d779815c5baee7b6008b26644ccd9c1848ae2b0c8cc008339614611116118465060886246dd067230672428390b2828490c3be7e40eea76bbd33967effddc3fce3de706efed5aabbe3def94d58b5963d7e25db3aa9fa766557f53dddfafdefeba3a5577fd330882a2203db50cd3e9c1d727f97f95fe2dff6653d718d755ee92b3284f385be40967cb3ce12cce13ce5679c2d93a4f38dbe40967db3ce13c24464ec5d6226838c5cddbce81ae713326f24cd3923cd0b434cf343d340f346d1fe4471b75589e7076c813cec3f384f3883ce13c324f388fca13cea3f384f3983ce13c364f388fcb13cee3f384f3843ce13c314f384fca13ce93f384f3943ce12ccb13ce8e79c2796a9e709e96279ca7e709e71979c279668c9c9d81b393fe3d4bff9ead7fcfd1bf52f65cfd7b9efeeda2eb58ace7cf575c61520f6992c6ffba85a97b987a84a9a7f1bf5e61ea1da63e61eaabff57a6ff5711a6ca30f50b53ff300dd01a0c0cd30561ba304c1785e9e2305d12a64bc37459982e0fd31561ba324c5785695098ae0ed33561ba364cd785e9fa30dd10a61bc334384c3785e9e6300d09d32d611a6ab0dc1aa66161ba2d4cc3c3747b984684696498aac3342a4c35611a1da6da30dd11a631611a1ba63bc3745798c685697c982684a92e4c13c334294c93c334254c53c3342d4c7787697a98ee09d3bd61bacfd0ecfe303d10a607c3f490c139234c0f87e991303d1aa66f85e9b1303d1ea627c2f4649866866956986687694e98e686695e98e68769419816866951989e0ad3d3617a264ccf86e9b9303d1fa617c2f462985e0ad3cb617a254caf86e935cd223bc2e230bd1ea625615a1aa665615a1ea637c2f4669856846965985685697598d684696d98d685697d9836846963983685697398b684e9ad306d0dd3b6306d0fd3db617a274c3bc2b4334cef86e9bd30ed0ad3ee30ed09d3de30ed0bd3fb61da1fa60fc2f461983e0ad3c761fa7698be13a6ef86e97b61fa7e987e6068fec330fd284c3f0ed34fb4eda7faf767baacdcbffb79987ea1f3bfd4bfbfd2bfbfd6bf9f18cbfc264cbf356cbf0bd3ef0ddba761fa4ce73fd7bf7fd0bf5fe8df3feadf2ff5ef9ff4ef9ff5ef5ff4ef5ff5efdff4efbfe9df7fd7bfffa17fffae7fffa17fff19a62d1dd3f9b641fd5415c4d44675af4d3dfb11f13b050d27a5454bfd3ff92dd3f6623d2fbfa25d2b3ddfcab0b7d6f3ad8df5b4d5f36d0d7b073ddfc1b01fa1e78f30ec47e9f9a30cfb317afe18c37eba9e3f1dec8900ee0d6bbbb2b5d4a622b049bcb6005b2b6d6b09b6d6b23ab0b5d1b6566093eddb1a6c87685b1bb0b5d3b6b6604b68db21a265984ab4ad2a882b56ca47aaf596c6bd5efdbcecd0f87947a9f5b677c47b58fcbca3d57a3b38e055f171b85ed761103747685b07b01da96d8783ed286d3b026c476bdb91603b46db8e02dbb1da7634d88ed3b663c076bcb61d0bb613b4ed38b09da86dc783ed246d3b016c276bdb89603b45db4e025b99b69d0c36dde406a780ed546d2b03db69dad6116ca76bdba9603b43db4e03db99da763ad8a4fd3d036c72be78a6b6a9b6e390225846dba5dd4a2d236d36d8ce96f61a6ce7485b0db6ced24e83ed5cf02db6f3a0ad115b176d93764bfdafafce570571ed27c95ab5de8ab8d71bae59adb75ffceb4d3d73ec1fd4eb5a057e2a40ab013a1f63bfa6aee8bb4827f123f662c85f0165a59ce821c71e6157c7984a9d1f9061b9bec672a550a6d252ffaa20defaf73378fa19ccad20ef2666bb75f331dbe829eb981d0265cdd893f3a0e618b38380c341ccf6f231dbe829eb98ad85b266ecc9b970738cd95b81c341cc56bb89d964b98fd9f47db320b0c79e5c0f35c7981d0b1cf1c76c0f1fb38d9fb28ed947a1ac197b724ddc1c63763a70c41fb3bdaafdb941a3a7ac6376219435634feecf34c7987d1c381cc46cad6f671b3d651db3af415933f6e45e61738cd9a78123fe98ede32866bbf9980dd2cf4083c01e7b72dfba39c6ec12e0883f6647f9fbb38d9fb28ed91d50d68c3d7986d21c637683ceabe70c3fd5cf194e04dbcfb4ed24e08d3fb66b7a388aeda48fed74df9020b0c7a83ccf6b8eb1bd5be7551cff12fa2388ed57dad6116cbfd6b653c1f689b69d06f572b00f54fb7da0d153d6fbc06fa1ac19cbf26cb939ee033f060e07315be363b6d153d631fb37286bc69ef473688e31fb29703888d95a1fb38d9eb28ed9ff82b266ec9da5f3cd3166a5afa93a5ff85c9f2f9c03b63f685b67b07da16de782ed8fda761ed8bed4b62e60fb93b69d0fb63f6b5b39d8fea26d5dc1f6576d4b82ed6fdad60d6cffa66dddc1f6efdad6036cffa16d3dc1f6776deb05b67f685b6fb0fd53dbfa689b7ade257dafe4bcb52df05705f16e5be97729eb96f9ae39f0dddef0dd3e87be3b18be3b587c271df84e800f998a8cf92ac827ddf29497020ffaea1ebfaf6eaaeedd82c6d7bd3bf0f47050f704f8680c4f0fe0e9193f4faaff6faff8d79bdac6dd0c4d13e0ab1bd4abb7837a15812f59b7cc8bbf52b061dbdadbc2d8277ec66411f89275cb7c1f60141bb6f5f2ce95ec3fea78d8a9a89ed7c1be943a27427f55c021fe8aa1cce51debcb76d66c25f07f3ceef5346c8ee2321517e24bd62df3e2af04ead333f78cc9c632f630185db51145e04bd6ed7dd76f07c9e371dcc1b58eb54d13df1539f0ddc7f0ddddf08d6da74c998e6d7d8039f66b4e7d6cab8c7fbde5787d22d786e207cf1ff01a2eae3aa16fb936143f622f86fcd545f565a59ce821edb0b0ab58966d89ece672bd8de54aa14c85a5fe5541bcf5af34782a0d6675bcb9108e850ef687540c54181c32df1db4ab8cd0ae02b49332678176aedab3be068fccf7041e69c77a018fab6ba2289e5c5c8f1dc8379ec3e2f5b3fc1fcf035c6dafae06a3ccdbb6571f60b49dab38b89ec978aed20318c5d61778ba39d22c6abb7623f1ed205652ed91f8907373d97fc55f3194e9d3b2beec9dd056ba88118c47991a7bcd1bff764aa6aec17b64c183dbcec175555747f1588ef76fbe0ae28d35b35dea616815758fc7555bdecde09179f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f199f2761bf2d29d79384d1ecffe6ea3e7feafb877a5df80ce87f3bed0f962cc7fe31d20fe21ca3cec550a6b4453ddbff83fe60e6732aec23d9d3ad76a96d89fd31ab605efc615f2bdc960cfd9dca62f39d1ce5ea799bfa0698fa8ea6d9f7b3a7455317fd9f51d3224353ec8f7faec1a3e2b4b2653d9b8b677fd93e8b44ad241fe7b3bdd2c01eebf16f97648367d62d8286ed071e675cf5df91b65a9e975718be8ba1cc092deab70df6b3aa823ac872d8ef47d62dcb9c03cb561aeb6eaf97158ed6c6fa7bc1b252e6646853f7b6a8d7cc415b99ccb6ef3a3e378fff389c7e8edf2d0b9eaec0e3a29d7174be518efb40dccff1cdfe69b6f31829837dfb1cf4abccd8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb63b09638efa3ea49e67c8b7caf0d9d48616f57e5d3f8793674e9d8d3ae3bba3ff6c51cfb645e74b82aff77788da96aebe4f11b52dc51f7e7b069f05b978ae5b04be64dd498b16922f8bcd77fa39be8bb121e4397e3743d7ee164d5dedaff88c1535c5fdb587c183cf46a3beed93346c2efb0e45c585f8c37d290936c9e3fbd12eb6331e4bcc7e3de20f9f5f7f576bdb3e70b5ed93e52edb0d79362fcfeabb59ea2a657e046ddf4f741efb7060df91cf2dff9729d3736ad14fd5d9c1f735cb8b605db27d6ddff61c08ac31f9ee8aeb2ad269a0a14131e43f6b515f56ca4959d15ad8d53e22df80417673b91ec672a550a6bfa5fe5541bcf537bfb53ac06056b1f37388b3cfe1f8efaa4dea1fa1d139a0919471fccd466bff4ab35f21b6a36d8c32b22c7e8beeafd04645f51fb51d035c1fc764ddb6e398795c684c3fcf42efa7f5dfd05ec4dd4febbf2186b09f5660acbf33ac5fb8da04d1c71629f37f8df59be7e4b20cf603fbd77e02df7349ea7c36e7e407ebfaca764e8ecb45d55d31e377d0aa6264c69840168c2729d34e6b2ddbac3282bb8f65d9d28865452bf35b6125c1d7f573f39db5f43e3fc0a88bc4357e835cca1c01757173de923e0774f54d395997b403494b5da5ccb1b0af1daff309d84ed8369f6df9bf4c99ce01710cf70be2af736afb5ea8d725dbf7028bef8b803526df5dd1b79c038a1fb11743feac96f565a59ce8215a0bbbda47e43c0ad9cde52a8ce54aa1cc404bfdab8278eb7f81c17381c1ac62e72488b3b3a11fbaabb67a6084469d41232983f7146ddf01b5ddeb70f5fe46d4b914bebf649e5fe171d2cd7993fd3cd6bcaf663b47e86cf0e339422f68671396b2e6fd42395ec6d96f18df95e8057ef15d0957df6eee0bba55c13c9e171c4cdf2ebe63abfc458d99d03707bea3c64cc885ef0e86ef0e39f4ed35f79a3369ee600c82d4fb67f8cd5235653a2fc5710964b916c0e8622c8744d0f0dbe30762c4f11d64b996c0e8e2f890edb7cf7b01a32c570c8c2ede2dc5f1371ac388df18c6e3bc303af8566cd7a67e2b16efe9b50646a67736f1d9541b6074715edcd477f5f07cbe2dfcba1a97a85b168c496094e50e014617f7c6f15aa6318c785d24cbb5034617cfb0b21ddf09bf3d8ff7965d32663ab63bee8b92ccf6de4ba55b9e8ce71ae8dbc1b886292df03ee381b4e8e79627e3b90ffa7670df2fa5058e3378202df0d9a08b710f1341c3e77007e2c1e797b2dce1c058e5887140168c55c0f8af7bc5c038d0116355168c038151ec4702a383fbaf29c6815930e27d4a59ee2860bcd011e30559305e088cb2dcd1c0e8e25e6a02fc3686f1226094e58e01c68b1d315e9405e3c5c028cb1d0b8c973862bc380bc64b8051963b0e182f75c47849168c9702a32c773c305ee688f1d22c182f034659ee0460bcdc11e36559305e0e8cb2dc89c0788523c6cbb360bc021865b99380f14a478c5764c1782530ca722703e3558e18afcc82f12a6094e54e01c6418e18afca82711030ca7265c078b523c64159305e0d8cb25c4760bcc611e3d559305e038cb2dca9c078ad23c66bb260bc161865b9d380f13a478cd766c1781d30ca72a703e3f58e18afcb82f17a6094e5ce00c61b1c315e9f05e30dc028cb9d098c373a62bc210bc61b81f1060be360478c3766c138181865b97381f1a6f81953d7d283b360bc09786e8e9f27a5d94d59f0dcec9627f55dbd9b2cbe6e89df576a5b0c091a5ff75b806768fc3ca96d714b163cc2500acba166b7c6cf98d26c68168cb702cfb0f879529add9a05cf30d0ec568b66b7c5cf98d26c58168cb701cff0f879529add9605cf70d0ec368b66b7c7cf98d26c78168cb703cf88f879529add9e05cf88a05eb3db2d9a8d8c9f31a5d9882c1847024f75fc3c29cd4666c1530d9a8db468362a7ec69466d559308e029e9af879529a8dca82a706341b65d16c74fc8c29cd6ab2601c0d3cb5f1f3a4341b9d054f2d6836daa2d91df133a634abcd82f10ee019133f4f4ab33bb2e019039add61d16c6cfc8c29cdc664c1381678ee8c9f27a5d9d82c78ee04cdc65a34bbcb11e39d5930de65e189fb3bd9775a7c8d7754f77141e3eb2e0ca5b01cf69398e088717c168c13805196c37e12758e182764c158078cb25cc23163a67e1275e07b62fcbe53ed525dd0787d26bae5c9d84f027d4f72a4c5c4a0f15a4c72cb93b19f04fa9eec488b4941e3b5980c3c531c6891001f8de1118652580efb494c75c438250bc6a9c028cb613f89698e18a766c1380d186539ec2771b723c6695930de0d8cb21cf69398ee88f1ee2c18a703a32c87fd24ee71c4383d0bc67b805196c37e12f73a62bc270bc67b815196c37e12f73962bc370bc6fb805196c37e12f73b62bc2f0bc6fb815196c37e120f3862bc3f0bc607805196c37e120f3a627c200bc607815196c37e120f39627c300bc687805196c37e12331c313e9405e30c6094e5b09fc4c38e186764c1f83030ca72d84fe211478c0f67c1f80830ca72773966cc74fdf24833f71d75add2dc7d475d973477df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f771cee4fb5107be13e043a62263be0af2c2500acbdde5199b3523f294c5c7538e75475fdf22a8fbb72c3c458eea8ebe1e23a8bb30e41be3a379c088fbb8d7b1e98c8e754c369551f13cee88e7b12c781e079e271cf13c9e05cf13c0f364fc3ca9987a220b1e612885e5eeca03c647f380d1ebe8756462f43a168e8e9ed1337a46cf783018f3a10df78c79118fc9a6322a9e99f1f3a4347b320b9e99a0992c77b35bc664531915cfacf879529acdcc8267166836d3a29903c664531915cfecf879529acdca8267366836cba29903c664531915cf9cf879529acdce82670e6836dba29903c664531915cfdcf879529acdc982672e6836c7a29903c664531915cfbcf879529acdcd82671e6836d7a29903c664531915cffcf879529acdcb82673e6836cfa29903c664531915cf82f879529acdcf8267016836dfa29903c664531915cfc2f879529a2dc882672168b6c0a2192be35d79c0f8681e303ad631d95446c5b3c811cfc22c781601cf538e781665c1f314f03c1d3f4f2aa69eca8247184a61b9bbf280f1d13c60f43a7a1d9918bd8e85a3a367f48c9e313bc66fe501a3dfd69e9195d1c1f555c677689e6ae6bea3dea169eebea3dea169eebe7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee39cc9f733f1fb4e66fb8d996780c7c5376f1cd5b35cadf759bdaeaf62d44f69f59ca1d5538656a550e659d0ef3907fa15815f59b7cc8bbf6c993b11303bf29d3c345cc721507ff1f1a8a187f2ffbca3ba47b5f5cf3773df516d7d73f71dd5d63777df3ece7d9c17826f1fe73ece0bc1b78f731fe72cbe31df2aa83f6f97ef9faa75bc00ff2f82f2f25de1622833a54dfab77de0f72117befd3ee48f1585e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe77c718ef15099039ec0e00932f02c24e39946c633878c670c19cf30329e6bc8782e24e379808ca73b19cf44329e51643c3791f15c41c6733e194f7f329ee9643c7dc878e692f1dc49c6f30419cf70329eebc8782e26e379888c2749c633998c673419cf2d643c5791f15491f1dc4bc6d38b8ce76c329ef1643cf3c878ce22e31941c6f32419cf0d643c8792f1b427e3b9948ce731329ef3c8782ac8781e26e35940c633958ce70e329e5bc978cac978ae26e3e942c6730119cffd643c3dc878e693f1d491f1cc24e3a926e3194cc6730e19cfe5643c2dc978fa91f12c22e3b99b8ca72f19cf58329ece643cb791f15c4bc6731119cf83643cddc8782691f1cc22e3a921e31942c6732519cf00329e7bc8787a93f18c23e3e944c6733b19cff5643cb9f89e69363c25643ca5643c9790f13c42c633838ca72b19cf14329ed9643cb5643c43c9780691f10c24e3b98f8ca72719cf04329e91643c3792f13c4ec67318194f07329ecbc8788a087812c1d7c73049c0ff9f015b0b6359f5d9d7b91debffffa2b6b780655ed2f9969675bf0836f996ec4b966551a717a12e553a5ffecda6944ee8ab0ae6c55f0970bc44c27319194f07329ec3c8781e27e3b9918c672419cf04329e9e643cf791f10c24e31944c633948ca7968c673619cf14329eae643c33c8781e21e3b9848ca7948ca7848ce719329eebc9786e27e3e944c6338e8ca73719cf3d643c03c878ae24e31942c65343c6338b8c6712194f37329e07c9782e22e3b9968ce736329ece643c63c978fa92f1dc4dc6b3888ca71f194f4b329ecbc978ce21e3194cc6534dc633938ca78e8c673e194f0f329efbc9782e20e3e942c67335194f3919cfad643c7790f14c25e35940c6f330194f0519cf79643c8f91f15c4ac6d39e8ce750329e1bc8789e24e31941c6731619cf3c329ef1643c6793f1f422e3b9978ca78a8ce72a329e5bc8784693f14c26e34992f13c44c6733119cf75643cc3c9789e20e3b9938c672e194f1f329ee9643cfdc978ce27e3b9828ce726329e51643c13c978ba93f13c40c6732119cf35643cc3c878c690f1cc21e39946c6b3908ca7d2c2f38c231e79df5dd62df3cf90f876b01dcad57a5f7654a757f4ba5aebf50abff82b863233daa57fd5f30f5c56b8ccef13e0bb39af8046af38aa8b6c8f2263fba0ef171cf936c7e793f9179ab9eff686eff605e2bb83e1bb4381f8f671eee3bc107cfb38f7715e08be7d9cfb3867f2ede0da2089df4993a9c898af823c5e2fb8f8be9ca37a36b84efc2a46fd9456af1a5a99d756a550e665d0ef5507fad9ae3d655efc65cbdc898019e3a22c88372e5e8bbf4e49d5eff010d0f535435facd762479a461d43163773df51c790e6ee3bea18d2dc7dfb38f7715e08be7d9cfb382f04df3ece7d9c33f97e5de763bc6e2c471fad82faeb81d7c1ef529d2f8ad1af5ad712f05b041ce2af18cafc2f78aee9f779bfcfc7e5db1fdb7c9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8668e73332ffdc5cf023657fdf9a3623117ef121c4cdf51b1d8dc7d47c56273f7ede3dcc73993ef650e7c27c0874c99faf82d039e250e781cd533f56c63b951a7678c3a9542193cc62f7750cf22f02beb96f9e5c0235325f0b88883c66c73e45948c6338d8c670e19cf18329e61643cd790f15c48c6f300194f77329e89643ca3c8786e22e3b9828ce77c329efe643cd3c978fa90f1cc25e3b9938ce709329ee1643cd791f15c4cc6f310194f928c673219cf68329e5bc878ae22e3a922e3b9978ca71719cfd9643ce3c978e691f18c20e379928ce706329e43c978da93f15c4ac6f31819cf79643c15643c0f93f12c20e3994ac6730719cfad643ce5643c8bc978ae26e3e942c6730119cffd643c3dc878e693f1d491f1cc24e3a926e3194cc6730e19cfe5643c2dc978fa91f12c22e3b99b8ca72f19cf58329ece643cb791f15c4bc6731119cf83643cddc8782691f1cc22e3a921e31942c6f32a19cf95643c03c878ee21e3e94dc6338e8ca71319cfed643cd793f19490f19492f15c42c6f30819cf0c329eae643c53c8786693f1d492f10c25e31944c633908ce73e329e9e643c13c8784692f1dc48c6f33819cf61643c1dc8782e23e32922e049045f7ff73f01ff7f156cf28efa33607b43e79780ad85c5474b9d5f0eb6629d9775b409d3f31dbfbe6ed4c9d57bf9e8ab0ae6c55f0970bc41c27319194f07329ec3c8781e27e3b9918c672419cf04329e9e643cf791f10c24e31944c633948ca7968c673619cf14329eae643c33c8781e21e3b9848ca7948ca7848ce77a329edbc9783a91f18c23e3e94dc6730f19cf00329e2bc9785e25e31942c65343c6338b8c6712194f37329e07c9782e22e3b9968ce736329ece643c63c978fa92f1dc4dc6b3888ca71f194f4b329ecbc978ce21e3194cc6534dc633938ca78e8c673e194f0f329efbc9782e20e3e942c6733519cf62329e72329e5bc978ee20e3994ac6b3808ce761329e0a329ef3c8781e23e3b9948ca73d19cfa1643c3790f13c49c633828c671e19cf78329eb3c9787a91f1dc4bc65345c6731519cf2d643ca3c9782693f124c9781e22e3b9988ce73a329ee1643c4f90f1dc49c633978ca70f19cf74329efe643ce793f15c41c6731319cf28329e89643cddc9781e20e3b9908ce71a329e61643c63c878e690f14c23e35948c653991b9ea47ab75dfa5a07c0855315e49703cf6207fa38aa67397ed7e0ab18d7abb47ad3d0ea5543ab5228b30cf47bd3817e45e057d62df3e22f1f9915cf233a6ffb0ec423248c625bec9627b5df3e12349c32edb76f028f8b76cd513d53fbd70aa34e8f5874973218ab2b1cd4d3b6efc8fc0ad80ef9c6ac781ed379614d40b9c74818c5b6dc2d4f6aff7a2c683865dabf56008f8bf6c7513d53fbd74aa34e8f5974973218ab2b1dd4d3b6efc8fc4ad80ef9c6ac781ed779614d40b9c74918c5f6a65b9eee09a8b34c99f6af95c0e3a2fd7154cfd4feb5caa8d3e316dda50cc6ea2a07f5b4ed3b32bf0ab68367f6cc3666c523cf76843501e59e206114db0aa73cddcb1350679932b563ab80c7453bef48f7543bb6daa8d31316dda50cc6ea6a07f5b4ed3b32bfdae2bb2c88578b358dd0628d85674d8eb5107fd9322fcb4366afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866069d158f7cbb52581350ee491246b1ad74cb937a2fe8c9a0e15464cc57417e0df0ac72a08fa37aa6fa90af35eaf4a445772983fbd75a07f5b4ed3b32bf16b64336ccabf390d9ebdc3466c53353e7853501e56692308a6d955b9e543b36336838656ac7d6028f8b76de513d53edd83aa34e332dba4b19dcbfd639a8a76ddf91f975b01d3cb367b6312b9e593a2fac0928378b84516c6b9cf22453ef37ce0a1a4e99dab175c0e3a29d77a47baa1d5b6fd4699645772983b1bade413d6dfb8eccaf87ed900df3ea3c64f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce85a3b3e299adf3c29a8072b34918c5b6d6294fb7d47387d941c329d37387f5c0b32e769ef4730707baa79e3b6c30ea34dba2bb94c1fd6b83837adaf61d99df00dba1b933afce43661f1bb961f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e6286686d8503c73745e5813506e0e09a3d8d6b9e5497df7604ed070cad46f6703f0ac77a08fa37aa6faed6c34ea34c7a2bb94c1fd6ba3837adaf61d99df08dbc1337b661bb3e299abf3c29a8072734918c5b6de2d4faa1d9b1b349c32b5631b81c7453befa89ea9766c9351a7b916dda50cc6ea2607f5b4ed3b32bf09b68367f6cc3666c5334fe7853501e5e691308a6d835b9e543b362f6838656ac736018f8b76de513d53edd866a34ef32cba4b198cd5cd0eea69db77647e336c07cfec996dcc8a67bece0b6b02cacd276114db46b73cc904d459a64cedd866e071d1ce3baa67aa1ddb62d469be45772983b1bac5413d6dfb8ecc6f81ed906fcc8a6781ce0b6b02ca2d206114db26b73ca9fd6b41d070cab47f6d011e17ed8fa37aa6f6afb78c3a2db0e82e653056df72504fdbbe23f36fc176c83766c5b350e7853501e51692308a6db35b9ed4feb530683865dabfde021e17ed8fa37aa6f6afad469d165a74973218ab5b1dd4d3b6efc8fc56d80ef9c6ac7816e9bcb026a0dc221246b1e1f16291239e5283a7d4a2c5c1f2ade62b74be44ff26e0ff15c0e8aa3d5c6430ca3cc638f2bad6acbdc1d3ded0ec60fa56f5afd4f943f52f6eaf4a6064d85eed73a0590783a783a1d9c1f4adb4e8a7f387e95fdc5efd8091617b75001e07ed73f784c1a3a64ce71b5b1debe3a89ea9f38d6d815d773c0e49193c766f73504fdbb984cc6f83ede0993db38d59f10cd679614d40b9c1248c62c3eb94edf1f3744f183c6acad48e6d77ac8fa37aa6dab1b703bbeedb41772983b1fab6837a16815f59b7ccbf0ddb211be6d579c8ec756e1ab3e219a2f3c29a8072434818c5b60d78de899fa77bc2e05153a676ec1dc7fa38aa67aa1ddb11d8757f07749732b87fed7050cf22f02beb96f91db01db2615e9d87cc5ee7a6312b9ea13a2fac0928379484516c6f03cfced879d2e301218f9a32b5633b1debe3a69ee976ecddc0aefb4ed05dcae0fef5ae837a16815f59b7ccbf0bdbc1337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d3337b3e219a6f3c29a8072c34818c5b60378de8b9d27fddc0179d494e9b9c37b8ef57153cff473875d815df7f740772983b1bacb413d8bc0afac5be677c176f0cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfcccdac7886ebbcb026a0dc701246b1bd0b3cbbe3e7e99e3078d494e9b9c36ec7fa38aa67eab9c39ec0aefb6ed05dca60acee7150cf22f02beb96f93db01df67866cf6c61563c23745e5813506e0409a3d87601cfded879d2cf4f91474d99dab1bd8ef57153cf743bb62fb0ebbe1774973218abfb1cd4b308fccaba657e1f6c876c9857e721b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec752e1c9d154fb5ce0b6b02ca5593308a6d0ff0bc1f3b4fb7f284c1a3a62263be0af2ef3bd6c74d3dd3cf1df60776dddf07dda50cee5ffb1dd4b308fccaba657e3f6c87e6cebc3a0f997d6ce486d9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a398196243f1d4e8bcb026a05c0d09a3d8f601cf07f1f3744f183c6a2a32e6ab20ff81637d1cd533d56fe7c3c0aefb07a0bb94c1fdeb4307f52c02bfb26e99ff10b68367f6cc3666c553abf3c29a8072b5248c62db0f3c1fc5cf934c183c6acad48e7de4581f47f54cb5631f0776dd3f02dda50cc6eac70eea59047e65dd32ff316c877c63563c63745e5813506e0c09a3d83e041e077197e229357864fe2302df6abe4ee74bf42f6eaf3a6064d85ea539d0acbdc1d3ded0ec60fa56f59fa8f387ea5fdc5e138191617bb5cf81661d0c9e0e866607d3b7d26292ce1fa67f717b4d024686edd521079a1dccf6f060eedb07334ebde6074ff3a283a879d141d4bcc86b4ea5b983e34b128f650130e05405f98f81e73bf1f3a4eecb7d9c05cf7780e7dbf1f3747554cf72b5deef027b5ceb555a7dcfd0ea6343ab5228830cdf73a05f11f89575cbbcf8f3cc9e398a19cf6d853501e53e226114dbb781c745bba1ea7e9e5e97acbf55983e39b2deaf8be72578afb8b55eaf7088bf622833a9ac9eedf79aad04fe2fdb4dd567bf6173f40e7357db733b99177f2541ceeedd66bc978c5ab878de94ed717fbf85e7abf878ca713f475ffb1cd53d9b677ffb2c3c31d6bd6bd473cfbdf1d73dd57e74d1eb92f5ab7df47f1ce954f3eeb8ef49fbd1c5a8733194195456cff69fd07ed8da0ad7fba69c939bfb668ba0be3d13ae326d379f097da5ed52ee03288f6d4e85fec5fdb302eaeaaa5d8cbac784eda2d976bbd4de7c2e69fa2e055d3e20d5ccf69c0275acb470571270633ce6723f9375db9e91551a3ab26986dbfa038b8efd2cdcfd08b819f7eb7e868e6c9a1d68bf1e6ce11e4cc0cdb85f0f367464d3ec40fbf5100bf710026ec6fd7a88a1239b6607daaf875ab887127033eed7430d1dd9343bd07e3dccc23d8c809b71bf1e66e8c8a6d981f6ebe116eee104dc8cfbf570434736cd0eb45f8fb0708f20e066dcaf47040d7564d3ec40fb75b585bb9a809b71bfae367464d3ec40fb758d85bb86809b71bfae317464d3ec40fb75ad85bb96809b71bfae357464d3ec40fbf5180bf718026ec6fdbab1fdf659f7eb3a0b771d0137e37e5d67e8c8a6d981f6eb8916ee8904dc8cfbf544434736cd0eb45f4fb2704f22e066dcaf27193ab26966dbaf1dbd4b98f5bb8d1f3ad5273dc6f48759f0bc0f3c2e62ca511c943beae792ea9bbad7d0ea43432b1cbb631fe8e7a02f4cc66f12883fcfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccfcccf85d467cbe22e53e2061141b3e9372719f5fd5fd7cbd2e597fab300d3abadeefbed8fd26cb5187d67abdc221fe8aa1ccf1a7d4b35da7d94a82af6f371c8b1bb7e59ed8eb90de9666fccbbcf82b81faec051e07efe7a778f6193cfb2c5ae07ba7f1f84e8e72a371b25c7d1fef90a07e3bef31ea839aee8edd7f434d8b0c4d773bf69d081a6e4f61c0a90af2c8e3e2d9b0a37aa6da825d469d4c8d4ba14c27a8e72e07f52c02bfb26e99df053c32b5001e573118183c81451f992ac978a691f18c21e3399d8c671819cfb1643cd790f11c42c6732119cf03643cddc9782692f18c22e339858ce726329e23c878ae20e3399f8ca7988ca73f19cf74329e3e643c7792f19c49c6339c8ce75c329ee3c978ae23e34990f15c4cc6f310194f928c673219cf68329e8e643cb790f11c45c67315194f6b329e2a329e7bc9787a91f19c4dc6339e8ce72c329e11643c2792f1dc40c67328194f7b329e4bc9781e26e3a920e3398f8c672a19cf1d643ca791f1dc4ac6534ec6730c19cfd5643c5dc8782e20e3694bc6733f194f0f329e3a329e6a329e93c9780693f19c43c6733819cfe5643c2dc978fa91f1dc4dc6d3978c672c194f67329e33c8786e23e3398e8ce75a329e76643c1791f1ec25e379908ca71b19cf24329e1a329efd643c65643c43c8788e24e3b9928ca71519cf00329e7bc8787a93f18c23e3e944c6733b19cf09643cd793f19490f19492f15c42c633838ca72b19cf14329e5a329e53c9788692f11c4dc633888ca70d19cf40329efbc8787a92f14c20e31949c6731219cf8d643c8791f17420e3b98c8ca7888027117cfd5b4c09f8ff3eb0c93783de075b0bcbfae439b59457c7c5251dbfbeee169675efb630a04eef415daa74befc9b4d299dd05715cc8bbf12e0d84dc27319194f07329ec3c8786e24e339898c672419cf04329e9e643cf791f10c24e36943c633888ce768329ea1643ca792f1d492f14c21e3e94ac633838ce712329e52329e12329eebc9784e20e3b99d8ca71319cf38329ede643cf790f10c20e36945c6732519cf91643c43c878cac878f693f1d490f14c22e3e946c6f32019cf5e329e8bc878da91f15c4bc6731c19cf6d643c6790f17426e3194bc6d3978ce76e329e7e643c2dc9782e27e3399c8ce71c329ec1643c2793f15493f1d491f1f420e3b99f8ca72d19cf05643c5dc878ae26e339868ca79c8ce756329ed3c878ee20e3994ac6731e194f0519cfc3643c9792f1b427e339948ce706329e13c9784690f19c45c6339e8ce76c329e5e643cf792f15491f1b426e3b98a8ce728329e5bc8783a92f18c26e3994cc69324e379888ce762329e0419cf75643cc793f19c4bc6339c8ce74c329e3bc978fa90f14c27e3e94fc6534cc6733e19cf15643c4790f1dc44c6730a19cf28329e89643cddc9781e20e3b9908ce710329e6bc8788e25e31946c6733a19cf18329e69643c95643c2d0c1efcbf7a376cafcecbb7838ae1ff9375e7f2f67a5d52469e11ab7b15ef1a3655df9d8eeafb6e503f55c1fc4ea8afb0bf0b3cef3ae279cfe0317d9740be1234db61d814e33b8e1877188c32ff0e308a7e3b806787239e9d068fe9bb04f2fd40b3b70d9b62dcee88f16d8351e6b703a3e8f736f0bced88e71d83c7f45d02f9c1a0d936c3a618b73a62dc6630cafc566014fdb601cf36473cdb0d1ed37709e48780666f1936c5b8c511e35b06a3cc6f0146d1ef2de079cb11cf5683c7f45d02f9a1a0d966c3a618373962dc6c30cafc266014fd3603cf66473c5b0c1ed37709e48781661b0d9b62dce08871a3c128f31b8051f4db083c1b1df16c32784cdf25901f0e9aad376c8a719d23c6f506a3ccaf0346d16f3df0ac77c4b3c1e0317d97407e0468b6d6b029c6358e18d71a8c32bf061845bfb5c0b3d611cf3a83c7f45d02f96ad06cb561538cab1c31ae3618657e15308a7eab8167b5239e35068fe9bb04f235a0d94ac3a6185738625c6930cafc0a6014fd5602cf4a473cab0c1ed37709e46b41b3370d9b627cc311e39b06a3ccbf018ca2df9bc0f3a6239e15068fe9bb04f26340b3e5864d312e73c4b8dc6094f965c028fa2d079ee58e78de30784cdf2590af03cd961a36c5b8c411e3528351e69700a3e8b71478963ae25966f098be4b203f11347bddb029c6c58e185f3718657e31308a7eaf03cfeb8e7896183ca6ef12c84f02cd5e336c8af155478caf198c32ff2a308a7eaf01cf6b8e78161b3ca6ef12c8df0036e1ed0bb65774be0fd85ed6f9de607b49e77b81ed459def09b61774be07d89ed7f9ee607b4ee7bb81ed599d4f82ed199def0ab6a775be3fd89ed2f901605ba4f355605ba8f303c1b640e72f00db7c9dbf106cf374fe22b0cdd5f98bc13647e72f01db6c9dbf146cb374fe32b0cdd4f9cbc1f6a4ce5f01b62774fe4ab03daef35781ed319d1f04b66fe9fcd5607b54e7af01db233a7f2dd8eed2f9ebc076b3ce5f0fb60f75fe46b07da4f33781ed639dbf056cdfd6f95bc1f61d9dbf0d6cdfd5f9dbc1f63d9d1f09b6efebfc28b0fd40e74783ed873a7f07d87ea4f363c1f6639dbf136c3fd1f97160fba9ce8f07dbcf747e02d87eaef393c1f60b9d9f02b65feafc54b0fd4ae7a781edd73a7f37d83ed1f9e960fb8dcedf03b6dfeafcbd60fb9dcedf07b6dfebfcfd60fb54e71f00db673aff20d83ed7f987c0f6079d9f01b62f74fe61b0fd51e7a55d53edec9f74be2c88b79dfd32a89fcac0b7f85365feacf36d8c32b26c31943953772854cf38d4b74ca51d967659d9a41d7e056cd20ebf0c3669875f029bb4c32f824ddae117c026edf0f3609376f839b0493bfc2cd8a41d7e066cd20e3f0d3669879f025b95ce2f029bb4c30bc126edf002b0493b3c1f6cd20ecf039bb4c373c126edf01cb0493b3c1b6cd20ecf029bb4c333c126edf093609376f809b0493bfc38d8a41d7e0c6cd20e7f0b6cd20e3f0a3669871f019bb4c377814ddae19bc126fbcb976093b6f943b049dbfc11d8a46dfe186cd2367f1b6cd2367f076cd2367f176cd2367f0f6cd2367f1f6cd236ff006cd236ff106cd236ff086cd236ff186cd236ff046ce375fea76093b6f9676093b6f9e76093b6f9176093b6f9976093b6f9576093b6f9d76093b6f913b049dbfc1bb049dbfc5bb049dbfc3bb049dbfc7bb049dbfc29d8a46dfe0c6cd2367f0e36699bff00b687755edaeab6609367c56a2aff86138ec3d3027c094b55106fdb8f5315e4b1ee325592f1cc25e31943c6f30219cfe9643cc3c8788e25e339848ce735329e89643c8bc8789693f12c23e379958ce714329e8d643c1bc8788e20e379978c672719cff9643cc5643cb3c9789e23e339938c673819cfb9643cc793f124c8781690f12c25e35942c6f332194f47329ef5643cebc8788e22e3d941c6f30e194f6b329e2fc9786692f19c4dc6f30c19cf59643c23c8784e24e339948ca73d194f0519cf79643cf3c8785e27e3594cc6f32219cf69643c6bc978d690f19493f11c43c6f33619cf76329e2e643c6dc9789e20e3a923e3798a8ca79a8ce764329ec1643ce790f11c4ec6d3928ca71f19cfcd643c73c8789e27e3e94cc6730619cf6a329e55643c5f90f11c47c6b38d8c672b194f3b329ebd643c93c8781692f1d490f1bc42c6b39f8ca78c8c670819cf91643cadc8783e24e39945c6f32c19cf4a329e15643c2790f1bc45c6b3858ca7848ca7948c673e194f2d19cf4b643ca792f10c25e3399a8ca70d19cf93643c4f93f1bc49c6f30619cf49643c9bc9783691f11c46c6d3818c671719cf7b643c45043c09e008c026ff6f0936f90ecf7eb07daef37bc126dff0790d6c9fe9fcc3607bd0626b61e1138619609377653f079bdc9f79086cf2cec4676093f306f1afe65775fc3a7f0b5846fcb4b4f0a3bfcf2c5c92c7ed2dcb5405f16e6ff45515d8bf795764301e6c9ef7c8787691f17420e3398c8c671319cf66329e93c878de20e379938ce769329e27c978da90f11c4dc633948ce754329e97c8786ac978e693f19492f19490f16c21e3798b8ce704329e15643c2bc9789e25e39945c6f321194f2b329e23c9788690f19491f1ec27e379858ca7868c672119cf24329ebd643cedc878b692f16c23e3398e8ce70b329e55643cabc978ce20e3e94cc6f33c19cf1c329e9bc978fa91f1b424e3399c8ce71c329ec1643c2793f15493f13c45c65347c6f304194f5b329e2e643cdbc978de26e339868ca79c8c670d19cf5a329ed3c8785e24e3594cc6f33a19cf3c329ef3c8782ac878da93f11c4ac6732219cf08329eb3c8789e21e3399b8c672619cf97643cadc978de21e3d941c6731419cf3a329ef5643c1dc9785e26e35942c6b3948c6701194f828ce778329e73c9788693f19c49c6f31c19cf6c329e62329ef3c9787692f1bc4bc6730419cf06329e8d643ca790f1bc4ac6b38c8c673919cf22329e89643caf91f11c42c6732c19cf30329ed3c9785e20e31943c633978ca7928ca7858567bf231ef9568cac5be6f73773df3b0ddf3b0bc4f73b86ef770ac4f776c3f7f602f1bdd5f0bdb5407c6f317c6f2910df9b0cdf9b0ac4f706c3f78602f1bdcef0bdae407caf317caf2910dfab0cdfab0ac4f70ac3f78a02f1fd86e1fb8d02f1bdccf0bdac407c2f317c2f2910df8b0ddf8b0bc437f3f5b7fa4e98f455dea57f13f0ff0a607ccd11e37e8351e65f0346b1e1f7a82b1cf1445dbb5710f8565ac8bd2c79e69980ff5702a3ab98aa301865de16533b81a7d2114fd43d874a02df4a0b79175bfa5426e0ff38feb2ab98aa341865de1653ef004f3f473c51f74afa11f8565ac8bbcff2ce5f02fe8fe3adbb8aa97e06a3ccdb626a3bf00c76c413758f6730816fa5857c2b4cbe499380ffe3f88cae626ab0c128f3b698c2f1738738e289ba373584c0b7d242beb52bdfbc4cc0ff71fc26573135c46094795b4ce1f871431df144dd531b4ae05b6921cf82e51bed09f8ff3060741553430d4699b7c5148e7733cc114fd4bdc06104be9516c3755efa5825e0ffc381d1554c0d331865de16531b8067b8239ea87b98c3097c2b2d46e8bcbcc39180ff8f0046573135dc6094795b4cad039e118e78a2eebd8e20f0adb4a8d6f9b5fa3701ffaf0646573135c26094795b4cad019e6a473c51f78cab097c2b2d6a745ebe399780ffe3f8ef231c31561b8c323f0218c5b60a786a1cf144ddebae21f0adb4906ffbafd4bf09f83f8ec7ea2aa66a0c4699b7c5148e075deb8827ea1e7d2d816fa5c5189d97316112f0ff31c0e82aa66a0d4699b7c5148e5f39c6114fd4b3853104be9516f26daee5fa3701ffaf0346573135c66094795b4c2d039e3a473c4b0c9e25162d0e966fa585f4e55eaa7f13f0ff89c0e82aa6ea0c4699b7c5d412e099e88827ea59ce4402df4a0bf9b6f6ebfa3701ff9f048cae626aa2c128f3b6985a0c3c931cf1443d839a9403df51cf5372e13bead9402e7c47dde7ce85efa87bb6b9f01d75ff3117bea3eea5e5c277d47da15cf88ebac7910bdf51d7ebb9f01d75ed990bdf51d751b9f01d754d900bdf51e7b7b9f01d75ae960bdf51e71dbe3df7ed79dcbe0fe6b943a1b6e707f3187a308f25fedac05f1be4cab73f96f86b835cf92ed46b03df9ee7be3d97ebafa220fa7aec0d47be9719be651e9fb32c73e47b89e15be6f199c11247be171bbe651eef7f2f76e4bbd4f02df38b73e0bbbde1bb7d0e7d77307c77b0f876b0bd9389a0e1f5b730e05405798c81d71d68e1a89ee56abd4bf5babe8a71bdb6fb36e6fe520a6596827eaedb0e59b7d976e42333c645517cbecb13e043be4ba66cf2fcf815b049bbff32d8a45fc04b609363d38b609367522f804d9e593d0fb6313aff21d8e4d931f6d997e7ffdbc156adf3d8577c84ce6f059bf4a5c23ecad21f6e0bd8a44f23f68d957ea99bc0267d8bb14fa6f40fdf0036e9e38f7d01e53d8d756093776db00f9abc2fb5066c7b751efb3ec9776856816d86ceaf04db1f747e05d81ed0f99bc1f6a9ce7f09b6dfebfc62b0ddaff3af83ed773abf146cf7e9fc7360fbadce3f0bb67b75fe19b0dda3f3f82edb6f74fe3db07da2f3f80ed5749ddf09b65feb3cbebb73b7cebf03b65fe9fcd3609ba6f34f816daace2f02db2f757e21d87ea1f30bc03645e7e783ede73a3f0f6c93757e2ed87ea6f373c03641e76783eda73a3f0b6ce3757e26d8c6e9fc9360fb89ce3f01b61febfc1760bb53e79780ad85ce2f039b8c1989fd548a75fe0db0b5d279ec7f24dff79f04b6363a3f116c6d75be0e6cf26db8316093f1a06bc196d0f91ab095e87c35d8e4fc6c04d864fc93e1609373a961603b4ce787824dce7b86804dc6b31c0c36f906693fb01da9f39560936feb5780ed689ddf0f361973ec35b0c977ebf6824dc6627e086cf2bdea19603b41e7ff00361987e501b09da4f39f82ed649dff3dd8e41b9ef783ad4ce77f07b68e3a7f1fd84ed5f9df824dc6c8ba176ca7ebfc3d6093b1837f0336f9def32760eba4f3d3c17696ceff1a6c3296c8dd6093f1417f05b6ce3a3f0d6cf21deea9603b4fe77f093619efef1760936f0c4f019b8cebf673b075d5f9c9604beafccfc0d64de72780adbbceff146c3d747e3cd87aeafc38b0f5d2f99f80adb7ceff186c7d745eda19b53fabfd7c9f9eaf0ae23b2f53fede0f1a4e99ae0d840179e23cd72e051ef4b527f6ba2753e7f5b2dfb7d0eb9518da03be77c5ee3b7d4db15bafab955eef2ec3773194394b370e6ab977e1ff555007590eef63c9ba6599f361d9f78c75b7d7f5ddeda8bebb0c26e1de0d4c52e6dc53eacbfe50e7dbc23231b2a5ae8f25d602d010a72ac80b831bad92e578dedb189eddc0b327769ef4f5ba8b98c07d2beeeb75f33eae196ba5506617e8f79e03fd705f9775cbbcf8f3cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfcccfac78f6e93c3e579672fb4818c5b607785cdce7c7e7b0f8ccebbd53eafdee89dd6fc3e77badf57acb8d3a174399afe099d35e9d2f81ffcb768bda960e9e1366dc96e2af04ea83cf82f639e2d963f0ecb16821f9b2d87c2747b9d13859aefab2a867ec7b0d5df7593475b5bfeed1eb2a3234c5fdf57d83079f8d9600ef07fa3701ebf900eae0601fcf1817e20ff7a53d6093fcfbc0e8623be3b144da03791e2efef0b9f8af8de7e2f16ffb64b9cb76439ef99bcfdbb1ae52e6f7d0f67da6f3d837641faceb1f96ffcb94e939b5e8a7eabc23fe3aa7b6aff46994edbbc3e2fb6d608dc9778377688a74123f622f86fcdfa13f8794133d446b61c7f1ca91dd5cee7d63b95228b3d352ffaa20defaef30787618cc2a76be8038fb071cff5db5493b23343a1f3492327b40a3bd8e78f6183cc221fe5419d9fe6d8c32b26c3194f99fd046a9ba483b2ff5c4be2d780c70751c135fb26e99b79d1bef0646b38e2a3e061d5dcfbb2776defceaffd5a62cfd8bed7a5cfdbf64ddedf5b2c21118eb2f87f5ff8b2b883eb6fc6bfb96d5afdf65ffb2bd469d856537304999f665f5652fd1f96ccef50fd6755bd4b9fe4e073c89a0e1b5b79a321ddff118f32efc5fca947fb3a9aba37a96db8e5def19752a85329da09e0ece6332be0bbc037cbbd8e6a8859c43ed32b42886321dcbd2bfd27644e988d7aabb735297a4f57cb0dc521729d3a9acbe2e6dc11e2793cbed86e7596abd7b2c759532e796d597eda2f309d84ed896f6b3fc5fa64ced018ec5b32dfe3aa7b6afbcf326db779bc5f75bc01a93ef06df0291f37df123f662c85796d5979572a287682dec6a1f9177fe90dd5c6e97b15c2994d96ea97f55106ffdb7193cdb0c66153b5dcbeaf312472edbcded111a9583465206ef1fcbb11ddfbbb31df7f738e28e3aeeef0146b3ddc47317976c7b0d36f31eaaed7c50cac8b2783e786559fa57b5b3094b59f3deb08bfb98f80e6a00f5088cbaca8431e0e0dab03b5e3b493b257eba807d8fce8bce5d0ced8aa1cce0b2f4afc3f36eebbd4bf3fa0eaf2984dbdcb7f0dd8fa165f5dc3876e21efd5b02b68ff4afa3ebb4eeb67b86c261bb6738a2ac9e1d9715ae0f2d7531af915b045fbfa7fe955116efbb655acecc9be3502a7d3f32cad9fce0354f6cef6a742d2f47a61681fd7ec1fb067b51f0f53137653fc09833efa37431d683f751eacad2bfd2269965559bf43f8eacd747b6a36887ed09c6e4fbc058a5f3e5df6cea6aabbfcc8b3fc5f8815107376d57fa7da56cee03ef051e176dbba336ba1c8fb16d635b6f9f6adbf1ff7d43ab1c3eafb51ef3cd67ee6d8d7c3cbe9335b6fb4f362d7659785c3d4789d26297c5777c5af41c653b7ed8b4c865df87282ddeb3f88e518b5abcef99498b772d3c2eee4565d2e25d8beff8b4e8559ee9b9066ab1d3c2e3eade439416e22f5be6f70898db1af9787c77afb6dd27b369b1c3c2e3eaba394a8b1d16dff169d1b527dea3cba4c53b169ef8efcf65d6e21d8beff8b4e8dd07efe165d2e26d0b8fab67ba515abc6df11d635c8cb6ddcbb169b1ddc2b33dc75a6cb7f88ef1fcb0a7ed5e9b4d8b6d161e07f75d336ab1cde23b462d46e27dd74c5a6cb5f06ccdb1165b2dbee3d3a2ba87ed9eb04d8bb72c3caeee094769f196c5777c5a8cecad7c6f6984165b2c3c5b72acc5168bef18afa15271b1b9115a6cb6f06cceb1169b2dbee3d3a22675aeb5a9115a6cb2f06ccab1169b2cbee3d3a23c754cddd8082d365a7836e6588b8d16df31c645ea7a724323b4d860e1d990632d36587cc7781c49c5c5fa4668b1dec2b33ec75aacb7f88e4f8bdad4fda7758dd0629d85675d8eb55867f11de33d97545cac6d84166b2d3c6b73acc55a8beff8b4e8963aa6ae6984166b2c3c6b72acc51a8beff8b4189d7a26b6ba115aacb6f0acceb116ab2dbe633cef4cb517ab1aa1c52a0bcfaa1c6bb1cae23bc6f3ced4fd8b958dd062a58567658eb55869f11d63db993aef5cd1082d56587856e4588b1516df319e77a6b478b3115abc69e17933c75abc69f11de37967ea38f24623b478c3c2e36a0c94282ddeb0f88e312e526de7f24668b1dcc2b33cc75a2cb7f88ef1be56aaed5cd6082d9659785c8dd710a5c5328bef18af4752f7f89636428ba5169ea539d662a9c5778ccf8a52e7e04b1aa1c5120bcf921c6bb1047cef8ddd77ba3fb7f890be58e7195a144399933ba67fa52f56948eb20eec578675793df6baa4fb952d8ea8cbeb501729733ad4a56de0648ca2ee8eea9a8a99d7f4baa46ffa0796ba4a99b33bd697edacf309d8261fc2bafa5afe2f5391315f0579d14fd5f995f8eb9c8a55194346b6ef2b16df2f016b4cbebba2ef229dc48fd88b21dfa7637d5929277a88d6c2aef69157751ed9cde59618cb954299572df5af0ae2adff2b06cf2b0673eabd0788338923376d579ae9d5088dce038da40cf6d9fbc0118fd9875038c49f2a23dbbf8d5106fb504a990ba08dc27ea552cf44f0f57e938edab2aec82eeb9679f1570ab6bdc068d651c5c727d0f753c68a907124944dc685e806ebe965d8545d7b3baaabf89275cb7c6f6094712a7ae59e31d958c69e06a3e2e9eb40331c7b43a64cc78bbec0d3c7018fa37aa68e4315469d7a1b752a8532f86e6385837a16815f59b7cc57806f17db1cb59063f2d98616c550668471fe18a5a3ac43c56f2f4b5dfa3bae8bac5bdaa5fe39f05d69f8ee61f84e040db7731064debf2a81b99f0366b5de01f1afb71ccfdb24a6c44f0fa8d340d020ae3ae1bae43c6fa0a16d31e4a7c1799e9493b272fc127615cbb22d91dd5caeafb15c2994e96fa97f55106ffd07183c030c6675ecbe13ceed1cec0fa918e86f70c87c0fd06e408476fd413b2983c7bf9e8eb4eb67f0c87c4fe091739c0ab0c9b982f027e0ffdd72c06db67b15166eb1e138713d2d8c3de2674c9debf4341865be07308aad1ff0543ad2ccdcd6671bfae071b98d5146962d8632b3e1d898b09455fb5da7a2fa7ab5d4f6d8de1dd36d7a6b077ae1388d01e813181aca240c6d83fab11ce3e46917d48fd538656adde491778cbe7e74fad1a3a0151b98f85b64a9460bb061bea5c516040d87a42c069b0c49d90a6c2d0c5970284c292f43dab9900bf59075171b9c6d81254edf389ca74c9942a70df0b80865153a32a4a70e9d9b278f9d3a1ae3a395c1d994d851ff6b99a15cd4ba5c6d07739fa8827933068b1df96f09f5ad8279f1a7b64da9ce4f1c39eaae8193ef98367ef484a953502873c7c67c51d0700398bf5182bbdae93000b0c2d838b432ea850d86fc4f364cbbf839bbe398b9a63601f893a91de8768803ddd4fa65ecdb5123c78dbb765af5b8b1a32e993661d4d4b17513706bb635948bdad2f2ffd660b335f158564dd86ce1b26d2c36db84a30cb7059b1cb90e019bf0b4035b4bc84b7973cb3809d74eb07ed9a5d4ff9438ad74c5db04f521208763d5aeaafd577d3e569d06a9a18ed5d0c66a73aaa18bd51d433534b1fa8a9d1a7a580d35ac86163e3e480f1dac860a3e29480f05acbe765116a487f63d35480fdd7b7a901e9af74ce0fb0e309f15a44fbbd4d0ba9d83f4d0b9ead6a57a755d7de64dbd5baf4edfd56d0175caab2ef1d4e9a73aed549717eaf685ba95a54ee9d4e9b23a1554a76fea726480d67a60982e08d38561ba284c1787e992305d1aa6cbc2747998ae08d39561ba2a4c83c2747598ae09d3b561ba2e4cd787e98630dd18a48777be29480fbfae867fbe25480f0d7d6b901e36fab6203da4f4ed417ab8e991417a28ea51417a98ead1417a08eb3b82f4f0d66383f430b97705e9a176c707e9e17ad570d86a986c357cb61ae6570d09ac861456430dab6189d510c66a08643534f27d417ac8653564f383417ad8e719617a384c8f84e9d1307d2b4c8f85e9f1203d3cb81a367c66901e665c0d3f3e27480f573e2f480f6fae863d57c3a1ab61d2d5f0e96a587535ccbb1afe5d0d0bff7c985e08d38b41fa91847a14a31e51a8dbffea3198ba45fd7a90be75be34483fe2568ffc551708d5254475915919a4bb50a92e65aa8b9dea72a8ba60aa2ea9aa8baeeab2acba70ab2eedaa8bbf7ae541bd02a25e8951af08a957a6d42b64ea953af58aa17a4d54bd76a95e2356af55ef09d2b7c5f705e947a5ea76b87a34a06e99abdbf71f87e9db413a26bf1ba6ef85e9fb61fa41987e18a61f05e9618dd570c76ab86435b4b21a86590dd9ac8672564341ab61a33f09d2434faba1ab7f17a487c4fe344c9f85e9f3203dbcf61761fa6398be0cd39fc2f4e730fd254c7f0dd3dfc2f46f61faf730fd4798fe1ea67f84e99f41fd30dbd8901caf5b1f7d05138c9c3a75f4f88953cba6d6958d9f366eead889e3ee2d9b3e76ea98b2babb474fae1d57371d17fe8e5e58c6081f3879f2c87bcbc64ea8197d4f59ddb4a96575b565d575d326d4343888ff452f74e2d73d8eaca98976f65fdf84f4ff34d1e921ba5d94d1d72fcf5cb792964d10e4f0a62cd4b365d32a34591fc1e452f786f47970d994717553cbcacb26847fc3036fddf4d1355dcaf07f534291a74c2d9b3275e4e4a965b593ebc69775ed82eb7da85d132af1dfeddcc09c717cd3c4e9a4bfb3d4a410fbd5294d50e03f4f691a69ebb26f40daaeac694ecbca9a50c3339bb2d0154d24bcb12c529629d3aaa74e1e396a6af4c2b77c93856f6f4a352734b19a27756c82b3d39ab2d0c08e4d23bcbd29ce6665e12cf8ffbd834b6784550600", + "bytecode": "0x1f8b08000000000000ffed9d779c14c5baf77b6141647645ccd9c5848ae232647681c19c30a38888b02c2b28b0443163961ccc19094ace02028a80184ecec993f4783ce9de7bcef9dc3fee7bef1b7c6fd74c3d777f5b542f3b6bd7f09b9deacfa776aa9fadeee75bbf7eba3a5577fd330882a22033b50cd319c1fe93fc3fa57fcbbfd9d425c67595bbe42cca13ce1679c2d9324f388bf384b3559e70b6ce13ce43f284b34d9e701e1a23a7626b11d49fe2e66deb40d7b8191379a669491e685a9a679a1e96079ab60bf2a38d3a3c4f38dbe709e71179c279649e701e95279c47e709e73179c2796c9e701e97279cc7e709e70979c279629e709e94279c27e709e72979c2796a9e7096e50967873ce13c2d4f384fcf13ce33f284f3cc3ce13c2b46ce4ec0d951ff9ead7fcfd1bfe7ea5f297b9efe3d5fff76d6752cd6f31728ae30a9873449e37f5dc3d42d4cddc3d4c3f85fcf30f50a53ef30f5d1ff2bd3ffab08536598fa86a95f98fa6b0d0684e9c2305d14a68bc37449982e0dd36561ba3c4c5784e9ca305d15a6abc334304cd784e9da305d17a6ebc37443986e0cd34d611a14a69bc3744b980687e9d6300d31586e0bd3d030dd1ea66161ba234cc3c334224c55611a19a6ea308d0a534d98ee0cd3e8308d09d35d61ba3b4c63c3342e4ce3c3541ba609619a18a649619a1ca629619a1aa67bc2342d4cf786e9be30dd6f68f640981e0cd343617ad8e09c1ea647c2f468981e0bd3e3617a224c4f86e9a9303d1da619619a19a659619a1da639619a1ba679619a1fa605615a18a667c2f46c989e0bd3f3617a214c2f86e9a530bd1ca657c2f46a985e0bd3eb617a43b3c88eb0284c6f8669719896846969989685e9ad30bd1da6e5615a11a695615a15a6d5615a13a6b5615a17a6f561da10a68d61da14a6cd617a274c5bc2b4354cdbc2f46e98b6876947987686e9bd30bd1fa65d61fa204cbbc3b4274c7bc3f46198f685e9a3307d1ca64fc2f46998be15a66f87e93b61fa6e98be17a6ef1b9aff204c3f0cd38fc2f4636dfb89fefda92e2bf7ef7e16a69febfc2ff4ef2ff5efaff4ef67c632bf0ed36f0cdb6fc3f43bc3f6fb307daef35fe8df3fe8df2ff5ef1ff5ef57faf74ffaf7cffaf72ffaf7affaf76ffaf75ff4efbfeadf7fd3bf7fd7bfffd0bfff0cd3e60e997c9ba06e4a0531b551dd6ad2cf7e44fc8e41fd4969d152ff4f7ecbb4bd58cfcbaf68d74acfb732ecadf57c6b633d6df47c1bc3de5ecfb737ec47eaf9230dfbd17afe68c37eac9e3fd6b09fa1e7cf007b22807bc3daae6c2db5a9086c12af2dc0d64adb5a82adb5ac0e6c87685b2bb0c9f66d0db643b5ed10b0b5d5b636604b68dba1a265984ab42d15c4152be523d47a4be35eaf7e5e7658fcbc23d57adb39e23d3c7ede516abded1df0aaf83842afeb70889b23b5ad3dd88ed2b623c076b4b61d09b663b4ed28b01dab6d4783ed386d3b066cc76bdbb1603b41db8e03db89da763cd84ed2b613c076b2b69d08b653b4ed24b09daa6d2783ad4cdb4e019b6e728353c1769ab69581ed746deb00b633b4ed34b09da96da783ed2c6d3b036cd2fe9e0936395f3c4bdb54db7168112ca3edd26ea59791361b6ce7487b0db673a5ad065b2769a7c1761ef816dbf9d0d688adb3b649bba5fed747e753415cfb49b246adb722eef5866b56ebed1bff7ad3cf1cfb05755aa7c04f0568d55fe763ecd7d4057d17e9247ec45e0cf92ba1ac94133de4d823ecea1853a9f3fd1b58ae8fb15c2994a9b4d43f15c45bffbe064f5f83b915e4ddc46cd7ae3e661b3d651db383a1ac197b721ed41c637620703888d99e3e661b3d651db33550d68c3d39176e8e317b1b703888d92a37319b2cf7319bb96f1604f6d893eba1e618b3638023fe98edee63b6f153d631fb189435634fae899b63cc4e038ef863b667953f3768f49475cc2e80b266ecc9fd99e618b34f02878398adf1ed6ca3a7ac63f60d286bc69edc2b6c8e31fb2c70c41fb3bd1dc56c571fb341e6196810d8634fee5b37c7985d0c1cf1c7ec487f7fb6f153d631bb03ca9ab127cf509a63ccaed779f59ce127fa39c34960fba9b69d0cbcf1c776757747b19df4b19de91b1204f61895e779cd31b63fd07915c7bf80fe0862fba5b67500dbafb4ed34b07da66da743bd1cec03557e1f68f494f53ef01b286bc6b23c5b6e8efbc08f80c341cc56fb986df49475ccfe0dca9ab127fd1c9a63ccfe1e381cc46c8d8fd9464f59c7ec7f425933f6ced6f9e618b3d2d7549d2f7ca1cf17ce05db1fb4ad13d8bed4b6f3c0f6476d3b1f6c5f695b67b0fd49db2e00db9fb5ad1c6c7fd1b62e60fbabb625c1f6376deb0ab67fd1b66e60fb576deb0eb67fd3b61e60fbbbb6f504db3fb4ad17d8fea96dbdb54d3def92be5772deda06f85341bcdb56fa5dcaba65be4b0e7cb7337cb7cba1eff686eff616df4907be13e043a622633e05f9a45b9ef252e0415fdde2f7d555d5bd6bd0f8ba77039eee0eea9e001f8de1e90e3c3de2e749f7ffed19ff7ad3dbb8aba169027c75857af57250af22f025eb9679f1570a366c5b7b59187bc7cf982c025fb26e99ef0d8c62c3b65edeb992fd471d0f3b16d5f13ad897d2e744e24fbe5b261cddc02e65aee850c7d649b395c0fff1b8d7c3b0398acb745c882f59b7cc8bbf12a84f8fdc33261bcbd8dd6074d54614812f59b7f75db71d248fc77107d73ad6364d7c57e4c0776fc37737c337b69d3235746ceb0dccb15f73ea635b65fceb2dc7eb13b936143f78fe80d77071d5097dcbb5a1f8117b31e4af29aa2b2be5440f6987855dc5b26c4b643797eb652c570a652a2cf54f05f1d6bfd2e0a93498d536b9088e850ef687740c54181c32df0db4ab8cd0ae02b49332678376aedab33e068fccf7001e69c77a028fab6ba2289e5c5c8f1dc8379ec3e2f5b3fc1fcf035c6daf2e06a3ccdbb6576f60b49dab38b89e69f05ca53b308aad0ff07475a459d476ed4ae2db41aca4db23f121e7e6b2fff600bb94e9ad5fa8536de55dd056ba88118c47991a7bcd1bff764aa6afc1bb67c183dbcec175551747f1588ef76fbe0ee28d35b35dea6e6815758fc7555bded5e09179f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f199f2761bf2d29d78384d1ecffe6ea3e7ffafb877a5db27ef55ce7ff38ed0f962cc7fe31d20fe25ca3cec550a6b4455dd9ff0ffdc1cce754d847b2875bedd2db12fb63a6605efc615f2bdc960cfd9dca62f39d1ce9ea799bfa0698fa8ea6d9f7b387455317fd9f51d3224353ec8f7f9ec1a3e2b4b2651d9b8b677fd93e8b44ad241fe7b3bdd2c01eebf16f9764bd67d62d82faed071e675cf5df91b65a9e975718be8ba1cc892deab68df4ad923186bb1acb61bf1f59b72c732ed82b8d75b7d3cb0a472b63fd3d615929730ab4a97b5ad469e6a0ad4c66db771d9f9bc77f1cce3cc7ef9a054f17e071d1ce383adf28c77d20eee7f866ff34db798c94c1be7d0efa5536d8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb61b09638efa3ea49f67c8b7ca64fde9ef05b7a8f3ebfa399c3c73ea64d419df1dfd678bbab29b75be24d8bfbf43d4b674f57d8aa86d29fef0db33f82cc8c573dd22f025eb4e5ab4907c596cbe33cff15d8c0d21cff1bb1aba76b368ea6a7fc567aca829eeafdd0d1e7c361af56d9fa46173d977282a2ec41fee4b49b0491edf8f76b19df15862f6eb117ff8fcfa3b5adb7681ab6d9f2c77d96ee0775352c1fef18ddf53f921b47d3fd679ecc3817d47beb0fc5fa6869e538b7eaace0ebeaf595e04eb92ed6bfbb6e700608dc977175c57914e030c0d8a21ff798bbab2524eca8ad6c2aef611f9060cb29bcb7537962b8532fd2cf54f05f1d6dffcd66a7f83596d939f419c7d01c77f576d52bf088dce058da48ce36f365afb579afd0ab11d6d6d949165f15b747f85362aaaffa8ed18e0fa3826ebb61dc7cce34263fa79167a3fadff82f622ee7e5aff053184fdb40263fd9d60fdc2d53a883eb64899ff67acdf3c279765b01fd8ffec27f03d97a4ce67734e7eb0aeaf6ce7e4b85c54dd15337e072d152333c604b2e079829469abb5966d5619c1dddbb26c69c4b2a295f9adb092607ffddc7c672db3cff737ea22718ddf20973247425ddc9cb764ce015d7d532e057552f9a4a5ae52e638d8d74ed0f9046c27dc6fcfb1fc5fa686ce01710cf70be3af737afb5e049c29f083be2f06d6987c7741df720e287ec45e0cf9b35bd6959572a287682dec6a1f91f328643797ab30962b8532032cf54f05f1d6ff4283e74283596d939321cece817ee8aedaea01111a75028da40cde53b47d07d476afc3d5fb1b51e752f8fe92797e85c74937e74df6f358f3be9aed1ca193c18fe7083da19d4d58ca9af70be5781967bf617c57a227f8c577255c7dbbb90fe89682793c2f3898be5d7cc756f98b1a33a14f0e7c478d99900bdfed0ddfed73e8db6bee3567d2dcc11804e9f7cff09ba56a6ae8bc14c72590e55a00a38bb11c1241fd6f8f1f8811c77790e55a02a38be343b6df3eef098cb25c3130ba78b714c7df680c237e63188ff3c2e8e05bb15d9afaad58bca7d71a1899ded9c467538700a38bf3e2a6beab87e7f36de0d7d5b8445db3604c02a32c772830bab8378ed7328d61c4eb2259ae2d30ba788695edf84ef8ed79bcb7ec92b1a163bbe3be28c96cefbd54bae569f05c037d3b18d730ad05de673c90167dddf23478ee83be1ddcf74b6b81e30c1e480b7c36e862dcc34450ff39dc8178f0f9a52c770430a61c31f6cf8231058cff73af18180738624c65c1380018c57e14303ab8ff9a661c900523dea794e58e06c68b1c315e9805e345c028cb1d038c2eeea526c06f63182f064659ee5860bcc411e3c559305e028cb2dc71c078a923c64bb260bc141865b9e381f132478c9766c1781930ca722700e3e58e182fcb82f1726094e54e04c62b1c315e9e05e315c028cb9d048c573a62bc220bc62b8151963b1918af72c47865168c5701a32c770a305eed88f1aa2c18af064659ee54601ce888f1ea2c180702a32c57068cd738621c9805e335c028cb7500c66b1d315e9305e3b5c028cb9d068cd73962bc360bc6eb8051963b1d18af77c4785d168cd703a32c770630dee088f1fa2c186f004659ee4c60bcd111e30d5930de088cb2dc59c0789323c61bb360bc09186fb4300e72c47853168c838051963b0f186f8e9f317d2d3d280bc69b81e796f879d29add9c05cf2d6e79d2dfd5bbd9e2ebd6f87da5b7c5e0a0f175bf157886c4cf93de16b766c1230ca5b01c6a765bfc8c69cd8664c1781bf00c8d9f27add96d59f00c05cd6eb368767bfc8c69cd8666c1783bf00c8b9f27add9ed59f00c03cd6eb7687647fc8c69cd8665c17807f00c8f9f27add91d59f00c0fea34bbc3a2d988f819d39a0dcf827104f054c5cf93d66c44163c55a0d9088b6623e3674c6b569505e348e0a98e9f27add9c82c78aa41b39116cd46c5cf98d6ac3a0bc651c053133f4f5ab35159f0d48066a32c9add193f635ab39a2c18ef049ed1f1f3a435bb330b9ed1a0d99d16cdc6c4cf98d66c74168c6380e7aef879d29a8dc982e72ed06c8c45b3bb1d31de9505e3dd169eb8bf937d97c5d73847751f1b34beeec2500acb613f89f18e18c765c1381e186539ec2751eb88717c168cb5c028cb251c3336d44fa2167c4f88df77ba5daa0d1aafcf04b73c0df69340df131d69312168bc1613ddf234d84f027d4f72a4c5c4a0f15a4c029ec90eb448808fc6f00843292c87fd24a638629c9c05e3146094e5b09fc454478c53b2609c0a8cb21cf693b8c711e3d42c18ef0146590efb494c73c4784f168cd3805196c37e12f73a629c9605e3bdc028cb613f89fb1c31de9b05e37dc028cb613f89fb1d31de9705e3fdc028cb613f89071c31de9f05e303c028cb613f89071d313e9005e383c028cb613f89871c313e9805e343c028cb613f89871d313e9405e3c3c028cb613f89e98e181fce82713a30ca72d84fe211478cd3b3607c04186539ec27f1a823c647b2607c141865b9bb1d333674fdf26833f71d75add2dc7d475d973477df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f771cee4fb3107be13e043a622633e0579612885e5eef68ccd9a1179cae2e329c7baa3afc709eafeb885a7c851ddd1d713047517867c637c2c0f18711ff73a369dd1b18ec9a6322a9e271df13c9105cf93c0f394239e27b3e0790a789e8e9f271d534f65c1230ca5b0dcdd79c0f8581e307a1dbd8e4c8c5ec7c2d1d1337a46cfe8190f06633eb4e19e312fe231d95446c533237e9eb4664f67c133033493e56e71cb986c2aa3e299193f4f5ab31959f0cc04cd66583473c0986c2aa3e299153f4f5ab39959f0cc02cd665a3473c0986c2aa3e2991d3f4f5ab35959f0cc06cd66593473c0986c2aa3e299133f4f5ab3d959f0cc01cd665b3473c0986c2aa3e2991b3f4f5ab33959f0cc05cde6583473c0986c2aa3e299173f4f5ab3b959f0cc03cde65a3473c0986c2aa3e2991f3f4f5ab37959f0cc07cde6593473c0986c2aa3e259103f4f5ab3f959f02c00cde65b346365bc3b0f181fcb0346c73a269bcaa878163ae2599005cf42e079c611cfc22c789e019e67e3e749c7d43359f00843292c77771e303e96078c5e47af2313a3d7b17074f48c9ed13366c7f8781e30fa6ded1959191d5c5f35f80ecd33cddc77d43b34cddd77d43b34cdddb78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c33f97e2e7edfc96cbf31f31cf0b8f8e68da37a96abf53eafd7f5758cfa29ad5e30b47ac6d0aa14ca3c0ffabde040bf22f02beb9679f1972d7347026647be938785eb3814ea2f3e1e33f450fe5f7454f7a8b6fec566ee3baaad6feebea3dafae6eedbc7b98ff342f0ede3dcc77921f8f671eee39cc537e65b0575e7edf2fd53b58e9774be58cf4bf9c7c12e65261f92f96d17f87dc8856fbf0ff9634521f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7395f9c633c54e6802730788206781690f14c25e3994dc6339a8c672819cfb5643c1791f13c48c6d38d8c670219cf48329e9bc978ae24e3b9808ca71f19cf34329ede643c73c878ee22e3798a8c671819cff5643c9790f13c4cc69324e39944c6338a8ce756329eabc97852643cf791f1f424e339878c671c19cf5c329eb3c9788693f13c4dc6732319cf61643cedc8782e23e379828ce77c329e0a329e47c878e693f14c21e3b9938ce736329e72329e6bc8783a93f15c48c6f300194f77329e79643cb5643c33c878aac8780691f19c4bc67305194f4b329ebe643c0bc978ee21e3e943c633868ca71319cfed643cd791f15c4cc6f310194f57329e89643c33c978aac9780693f15c45c6d39f8ce75e329e5e643c63c9783a92f1dc41c67303194f2ebe679a0d4f09194f2919cfa5643c8f92f14c27e3e942c633998c6716194f0d19cf10329e81643c03c878ee27e3e941c6339e8c670419cf4d643c4f92f11c4ec6d39e8ce772329e22029e44b0ff182609f8ff73606b612cab3efb3aa743ddff5fd6f616b0cc2b3adfd2b2ee97c126df927dc5b22ceaf432d425a5f3e5df6c4aeb84be52302ffe4a80e315129ecbc978da93f11c4ec6f32419cf4d643c23c878c693f1f420e3b99f8c670019cf40329e21643c35643cb3c8782693f17421e3994ec6f32819cfa5643ca5643c25643ccf91f1dc40c67307194f47329eb1643cbdc878ee25e3e94fc6731519cf60329e6a329e99643c13c978ba92f13c44c6733119cf75643cb793f17422e31943c6d3878ce71e329e85643c7dc9785a92f15c41c6732e19cf20329e2a329e19643cb5643cf3c878ba93f13c40c67321194f67329e6bc878cac9786e23e3b9938c670a19cf7c329e47c8782ac878ce27e379828ce732329e76643c8791f1dc48c6f33419cf70329eb3c978e692f18c23e339878ca72719cf7d643c29329eabc9786e25e31945c633898c2749c6f33019cf25643cd793f10c23e3798a8ce72e329e39643cbdc978a691f1f423e3b9808ce74a329e9bc9784692f14c20e3e946c6f32019cf45643cd792f10c25e3194dc6339b8c672a19cf02329e4a0bcf738e78e47d7759b7cc3f47e2dbc1762857eb7dd5519d5ed3eb6aa5d72bfce2af18ca4c6f9bf955cf3f7059e132bf4f80efe6bc061abde6a82eb23d8a8ced83be5f72e4db1c9f4fe65f6ae6bedb19bedb1588eff686eff605e2dbc7b98ff342f0ede3dcc77921f8f671eee39cc9b7836b83247e274da622633e0579bc5e70f17d3947f5ac779df8758cfa29ad5e37b432afad4aa1ccaba0dfeb0ef4b35d7bcabcf8cb96b9230133c64559106f5cbc117f9d92aadfe1a1a0eb1b86be58af458e348d3a862c6ae6bea38e21cddd77d431a4b9fbf671eee3bc107cfb38f7715e08be7d9cfb3867f2fda6cec778dd588e3ed4f345b91e7813fc2ed1f9a218fdaa752dd6eb2ad6eb168e25609732ff1b9e6bfa7ddeeff371f9f6c7361fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be99e3dccc4b7ff1b381cd557ffea858ccc5bb0407d377542c3677df51b1d8dc7dfb38f771cee47ba903df09f02153437dfc9602cf62073c8eea997eb6b1cca8d373469d4aa10c1ee39739a86711f89575cbfc32e091a912785cc44163b639f22c20e3994ac6339b8c673419cf50329e6bc9782e22e379908ca71b19cf04329e91643c3793f15c49c67301194f3f329e69643cbdc978e690f1dc45c6f31419cf30329eebc9782e21e379988c2749c633898c671419cfad643c5793f1a4c878ee23e3e949c6730e19cf38329eb9643cc3c9789e26e3b9918ce730329e76643c9791f13c41c6733e194f0519cf23643cf3c978a690f1dc49c6731b194f3919cf22329e6bc8783a93f15c48c6f300194f77329e79643cb5643c33c878aac8780691f19c4bc67305194f4b329ebe643c0bc978ee21e3e943c633868ca71319cfed643cd791f15c4cc6f310194f57329e89643c33c978aac9780693f1bc4ec67315194f7f329e7bc9787a91f18c25e3e948c6730719cf0d643c25643ca5643c9792f13c4ac6339d8ca70b19cf64329e59643c35643c43c8780692f10c20e3b99f8ca70719cf78329e11643c3791f13c49c67338194f7b329ecbc9788a087812c1feeffe27e0ffaf834dde517f0e6c6fe9fc62b0b5b0f868a9f3cbc056acf3b28e43c2f46287fdd78d3ab97a2f1f7da5605efc9500c75b243c9793f1b427e3399c8ce749329e9bc8784690f18c27e3e941c6733f19cf00329e81643c43c8786ac8786691f14c26e3e942c6339d8ce751329e4bc9784ac9784ac8786e20e3b9838ca72319cf58329e5e643cf792f1f427e3b98a8ce775329ec1643cd5643c33c9782692f17425e379888ce762329eebc8786e27e3e944c633868ca70f19cf3d643c0bc978fa92f1b424e3b9828ce75c329e41643c55643c33c8786ac978e691f17427e379808ce742329ece643cd790f12c22e32927e3b98d8ce74e329e29643cf3c9781e21e3a920e3399f8ce709329ecbc878da91f11c46c6732319cfd3643cc3c978e692f18c23e339878ca72719cf7d643c29329eabc9786e25e31945c633898c2749c6f33019cf25643cd793f10c23e3798a8ce72e329e39643cbdc978a691f1f423e3b9808ce74a329e9bc9784692f14c20e3e946c6f32019cf45643cd792f10c25e3194dc6339b8c672a19cf02329ecadcf024d5bbedd2d73a002e9c52905f063c8b1ce8e3a89ee5f85d83af635cafd2ea6d43abd70dad4aa1cc52d0ef6d07fa15815f59b7cc8bbf7c64563c8feabced3b108f92308a6d915b9ef47efb68507f6a68bf7d1b785cb46b8eea99debf961b757ad4a2bb94c1585deea09eb67d47e697c376c83766c5f384ce0b6b02ca3d41c228b6656e79d2fbd71341fda9a1fd6b39f0b8687f1cd533bd7fad30eaf48445772983b1bac2413d6dfb8eccaf80ed906fcc8ae7499d17d604947b9284516c6fbbe5e996803acbd4d0feb502785cb43f8eea99debf561a757ad2a2bb94c1585de9a09eb67d47e657c276f0cc9ed9c6ac78e4d98eb026a0dc53248c625bee94a75b7902ea2c5343edd84ae071d1ce3bd23ddd8ead32eaf49445772983b1baca413d6dfb8eccafb2f82e0be2d5627523b4586de1599d632dc45fb6cc4bf390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398a994167c523dfae14d604947b9a84516c2bdcf2a4df0b7a3aa83f1519f329c8af069e950ef47154cf741ff235469d9eb6e82e6570ff5ae3a09eb67d47e6d7c076c88679551e327b9d9bc6ac7866e8bcb026a0dc0c1246b1ad74cb936ec76604f5a786dab135c0e3a29d7754cf743bb6d6a8d30c8bee5206f7afb50eea69db77647e2d6c07cfec996dcc8a67a6ce0b6b02cacd246114db6aa73cc9f4fb8d3383fa5343edd85ae071d1ce3bd23ddd8ead33ea34d3a2bb94c1585de7a09eb67d47e6d7c176c88679551e327b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5ee7c2d159f1ccd279614d40b959248c625be394a76bfab9c3aca0fed4d0738775c0b336769ecc730707baa79f3bac37ea34cba2bb94c1fd6bbd837adaf61d995f0fdba1b933afca43661f1bb961f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e6286686d8503cb3755e5813506e3609a3d8d6bae5497ff76076507f6aa8dfce7ae059e7401f47f54cf7dbd960d469b645772983fbd70607f5b4ed3b32bf01b68367f6cc3666c53347e7853501e5e690308a6d9d5b9e743b3627a83f35d48e6d001e17edbca37aa6dbb18d469de65874973218ab1b1dd4d3b6efc8fc46d80e9ed933db9815cf5c9d17d604949b4bc228b6f56e79d2edd8dca0fed4503bb611785cb4f38eea996ec73619759a6bd15dca60ac6e72504fdbbe23f39b603b7866cf6c63563cf3745e5813506e1e09a3d836b8e54926a0ce3235d48e6d021e17edbca37aa6dbb1cd469de65974973218ab9b1dd4d3b6efc8fc66d80ef9c6ac78e6ebbcb026a0dc7c1246b16d74cb93debfe607f5a786f6afcdc0e3a2fd7154cff4fef58e51a7f916dda50cc6ea3b0eea69db7764fe1dd80ef9c6ac7816e8bcb026a0dc021246b16d72cb93debf1604f5a786f6af7780c745fbe3a89ee9fd6b8b51a70516dda50cc6ea1607f5b4ed3b32bf05b643be312b9e853a2fac0928b79084516c78bc58e888a7d4e029b56871b07cabf90a9d2fd1bf09f87f0530ba6a0f171a8c328f318ebcae356b67f0b433343b98be55fd2b75fe30fd8bdbab121819b657bb1c68d6dee0696f6876307d2b2dfaeafce1fa17b7575f6064d85eed81c741fbdc2d61f0a8a9a1f38d2d8ef57154cff4f9c6d6c0ae3b1e87a40c1ebbb73aa8a7ed5c42e6b7c276f0cc9ed9c6ac7806e9bcb026a0dc201246b1e175cab6f879ba250c1e3535d48e6d73ac8fa37aa6dbb17703bbeedb40772983b1faae837a16815f59b7ccbf0bdb211be65579c8ec756e1ab3e219acf3c29a8072834918c5b61578b6c7cfd32d61f0a8a9a1766cbb637d1cd533dd8eed08ecba6f07dda50cee5f3b1cd4b308fccaba657e076c876c9857e521b3d7b969cc8a6788ce0b6b02ca0d216114dbbbc0b333769ecc7840c8a3a686dab19d8ef57153cf4c3bf65e60d77d27e82e6570ff7acf413d8bc0afac5be6df83ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd579614d40b9a1248c62db013cefc7ce9379ee803c6a6ae8b9c3fb8ef57153cfcc73875d815df7f741772983b1bacb413d8bc0afac5be677c176f0cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfcccdac7886e9bcb026a0dc301246b1bd073c1fc4cfd32d61f0a8a9a1e70e1f38d6c7513dd3cf1d760776dd3f00dda50cc6ea6e07f52c02bfb26e99df0ddb61b767f6cc1666c5335ce7853501e58693308a6d17f0ec899d27f3fc1479d4d4503bb6c7b13e6eea9969c7f60676ddf780ee52066375af837a16815f59b7ccef85ed900df3aa3c64f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce85a3b3e2a9d279614d40b92a1246b1ed069e0f63e7e95a9e3078d45464cca720ffa1637ddcd433f3dc615f60d7fd43d05dcae0feb5cf413d8bc0afac5be6f7c17668eeccabf290d9c7466e987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398a992136144fb5ce0b6b02ca5593308a6d2ff07c143f4fb784c1a3a622633e05f98f1cebe3a89ee97e3b1f0776dd3f02dda50cee5f1f3ba86711f89575cbfcc7b01d3cb367b6312b9e1a9d17d60494ab216114db3ee0f9247e9e64c2e0515343edd8278ef57154cf743bf66960d7fd13d05dca60ac7eeaa09e45e057d62df39fc276c83766c5335ae7853501e54693308aed63e0711077699e528347e63f21f0ade66b75be44ffe2f6aa054686ed559a03cdda193ced0ccd0ea66f55ff093a7f98fec5ed35011819b657bb1c68d6dee0696f6876307d2b2d26eafce1fa17b7d7446064d85eed73a0d9c16c0f0fe6be7d30e3d46b7ef0342f3a889a171d44cd8bbce6549a3b38be24f1581600034e29c87f0a3cdf8e9f277d5feed32c78be0d3cdf8a9fa78ba37a96abf57e07d8e35aafd2eabb86569f1a5a95421964f8ae03fd8ac0afac5be6c59f67f6cc51cc786e2bac0928f70909a3d8be053c2eda0d55f7f3f5ba64fdadc2f4d951757e5d3c2fc17bc5adf47a8543fc154399896575657fa7d94ae0ffb2dd547df6193647ef3077b13db79379f15712e4ecde6d83f792510b17cf9bb23deeefb3f07c1d1f4f39eee7e86bafa3ba67f3ec6faf8527c6ba77897aeeb927febaa7db8fce7a5db27eb58ffefb514e35ef86fb9eb41f9d8d3a17439981657565ff03da0f5b5be17adf94737273df6c11d4b567c255a6ede633a1afb55dca7d04e5b1cda9d0bfb87f56405d5db58b51f798b05d34db6e97da9bcf254ddfa5a0cb47a49ad99e53a08e9516ee4a026e8cc75cee67b26edb33b24a434736cd705b7f64d1b1af85bb2f0137e37eddd7d0914db303edd7832cdc8308b819f7eb41868e6c9a1d68bf1e6ce11e4cc0cdb85f0f367464d3ec40fbf5100bf710026ec6fd7a88a1239b6607daaf875ab887127033eed7430d1dd9343bd07e3dccc23d8c809b71bf1e66e8c8a6d981f6ebe116eee104dc8cfbf5f0a0be8e6c9a1d68bfaeb27057117033eed755868e6c9a1d68bfaeb67057137033eed7d5868e6c9a1d68bfaeb170d7107033eed735868e6c9a1d68bf1e6de11e4dc0cdb85f37b6df3eeb7e5d6be1ae25e066dcaf6b0d1dd9343bd07e3dc1c23d81809b71bf9e60e8c8a6d981f6eb8916ee8904dc8cfbf544434736cd6cfbb5a37709b37eb7f163a7fa64c698fe380b9e0f81c7454c398a837247fd5cd27d53f7185a7d6c68856377ec05fd1cf48569f09b04e2cf337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d333f337e97119faf48b98f4818c586cfa45cdce75775bf40af4bd6df2a4c038fa9f3bb3776bfc9f222c35f0a38c45f319439e1d4bab2d76bb69260ffed866371e3b6dc1d7b1d32dbd28c7f99177f25509f3dc0e3e0fdfc34cf5e8367af450b7cef341edfc9916e344e96abefe31d1ad46de7dd467d50d30f62f75f5fd32243d30f1cfb4e04f5b7a730e094823cf2b87836eca89ee9b66097512753e35228d311eab9cb413d8bc0afac5be677018f4c2d80c7550c06064f60d147a64a329ea9643ca3c978ce20e3194ac6731c19cfb5643c8792f15c44c6f320194f37329e09643c23c9784e25e3b9998ce748329e2bc9782e20e32926e3e947c6338d8ca73719cf5d643c6791f10c23e3398f8ce704329eebc97812643c9790f13c4cc69324e39944c6338a8ca70319cfad643c4793f15c4dc6d39a8c2745c6731f194f4f329e73c878c691f19c4dc6339c8ce724329e1bc9780e23e36947c6731919cf23643c15643ce793f14c21e3b9938ce774329edbc878cac9788e25e3b9868ca73319cf85643c6dc8781e20e3e94ec6534bc65345c6730a19cf20329e73c9788e20e3b9828ca725194f5f329e7bc878fa90f18c21e3e944c6732619cfed643cc793f15c47c6d3968ce762329e3d643c0f91f17425e39948c6534dc6b38f8ca78c8c673019cf51643c5791f1b422e3e94fc6732f194f2f329eb1643c1dc978ee20e339918ce706329e12329e52329e4bc978a693f17421e3994cc65343c6731a19cf10329e63c8780692f11c42c633808ce77e329e1e643ce3c9784690f19c4cc6731319cfe1643cedc9782e27e32922e04904fb7f8b2901ffdf0b36f966d087606b61599f3ca796f2eab8b8b8c3feeb6e6159f7071606d4e97da84b4ae7cbbfd994d6097da5605efc9500c707243c9793f1b427e3399c8ce726329e93c9784690f18c27e3e941c6733f19cf00329e43c8780692f11c43c633848ce734329e1a329ec9643c5dc878a693f15c4ac6534ac65342c6730319cf89643c7790f17424e3194bc6d38b8ce75e329efe643cadc878ae22e3398a8c6730194f1919cf3e329e6a329e89643c5dc9781e22e3d943c67331194f5b329eebc8788e27e3b99d8ce74c329e4e643c63c878fa90f1dc43c6d3978ca72519cf15643c4790f19c4bc633888ce714329e2a329e5a329eee643c0f90f1b421e3b9908ca73319cf35643cc792f19493f1dc46c6733a19cf9d643c53c878ce27e3a920e379848ce732329e76643c8791f1dc48c6731219cf70329eb3c978c691f19c43c6d3938ce73e329e14194f6b329eabc9788e26e3b9958ca70319cf28329e49643c49329e87c9782e21e34990f15c4fc6730219cf79643cc3c878ce22e3b98b8ca73719cf34329e7e643cc5643c1790f15c49c6732419cfcd643ca792f18c24e39940c6d38d8ce741329e8bc8780e25e3b9968ce738329ea1643c6790f18c26e3994ac65349c6d3c2e0c1ffab77c3f6e8bc7c3ba818fe3f49772e6fa7d72565e419b1ba57f19e6153f5dde9a8beef0575530ae677427d85fd3de079cf11cffb068fe9bb04f295a0d90ec3a618b73b62dc6130cafc766014fd7600cf0e473c3b0d1ed37709e4fb8266ef1a36c5b8cd11e3bb06a3cc6f0346d1ef5de079d711cf7683c7f45d02f941a0d956c3a618b73862dc6a30cafc166014fdb602cf56473cdb0c1ed37709e4078366ef1836c5b8d911e33b06a3cc6f0646d1ef1de079c711cf1683c7f45d02f921a0d926c3a618373a62dc6430cafc466014fd3601cf26473c9b0d1ed37709e48782661b0c9b625cef887183c128f3eb8151f4db003c1b1cf16c34784cdf25901f069aad336c8a71ad23c67506a3ccaf0546d16f1df0ac73c4b3dee0317d97407e3868b6c6b029c6d58e18d7188c32bf1a1845bf35c0b3c611cf5a83c7f45d02f92ad06c9561538c2b1d31ae3218657e25308a7eab806795239ed5068fe9bb04f2d5a0d90ac3a618973b625c6130cafc726014fd5600cf0a473c2b0d1ed37709e46b40b3b70d9b627ccb11e3db06a3ccbf058ca2dfdbc0f3b6239ee5068fe9bb04f2a341b365864d312e75c4b8cc6094f9a5c028fa2d039e658e78de32784cdf2590af05cd961836c5b8d811e3128351e61703a3e8b704789638e2596af098be4b203f01347bd3b029c6458e18df3418657e11308a7e6f02cf9b8e78161b3ca6ef12c84f04cdde306c8af175478c6f188c32ff3a308a7e6f00cf1b8e7816193ca6ef12c8df0836e1ed03b6d774be37d85ed5f95e607b45e77b82ed659def01b69774be3bd85ed4f96e607b41e7bb82ed799d4f82ed399def02b66775be1fd89ed1f9fe605ba8f329b02dd0f901609baff317826d9ece5f04b6b93a7f31d8e6e8fc25609badf397826d96ce5f06b6993a7f39d866e8fc15607b5ae7af04db533a7f15d89ed4f9abc1f684ce0f04dbe33a7f0dd81ed3f96bc1f6a8ce5f07b6bb75fe7ab0dda2f33780ed639dbf096c9fe8fccd60fb54e76f05dbb774fe36b07d5be76f07db7774fe0eb07d57e74780ed7b3a3f126cdfd7f95160fb81cedf09b61feafc18b0fd48e7ef02db8f757e2cd87ea2f3e3c0f6539d1f0fb69fe9fc24b0fd5ce72783ed173a3f056cbfd4f9a960fb95cedf03b6cf747e1ad87eadf3f782ed373a7f1fd87eabf3f783ed773aff00d87eaff30f82ed739d7f086c5fe8fcc360fb83ce4f07db973aff08d8fea8f3d2aea976f64f3a5f16c4dbce7e15d44d65e05bfca9327fd6f9d6461959b618ca9ca53b14aa671cea5ba6d20e4bbbac6cd20ebf063669875f059bb4c3af804ddae197c126edf04b609376f845b0493bfc02d8a41d7e1e6cd20e3f073669879f059bb4c3cf802da5f30bc126edf002b0493b3c1f6cd20ecf039bb4c373c126edf01cb0493b3c1b6cd20ecf029bb4c333c126edf00cb0493bfc34d8a41d7e0a6cd20e3f093669879f009bb4c38f834ddae1c7c026edf0a3609376f86eb0493b7c0bd8647ff90a6cd2367f0c36699b3f019bb4cd9f824ddae66f814ddae66f834ddae6ef804ddae6ef824ddae6ef814ddae6ef834ddae61f804ddae61f824ddae61f814ddae61f836d9cceff046cd236ff146cd236ff0c6cd236ff1c6cd236ff026cd236ff126cd236ff0a6cd2367f0636699b7f0d36699b7f0336699b7f0b36699b7f0736699b7f0f36699b3f079bb4cd5f804ddae63f80ed119d97b6ba0dd8e459b19acabfe184e3f0b4005fc2920ae26dfb714a411eeb2e532519cf1c329ed1643c2f91f19c41c633948ce738329e43c978de20e39940c6b3908c671919cf52329ed7c9784e25e3d940c6b39e8ce748329ef7c8787692f15c40c6534cc6338b8ce705329eb3c8788691f19c47c67302194f828c673e19cf12329ec5643caf92f17420e35947c6b3968ce768329e1d643cdbc9785a93f17c45c633838ce71c329ee7c878ce26e3194ec6731219cf61643cedc8782ac878ce27e3994bc6f32619cf22329e97c9784e27e35943c6b39a8ca79c8ce758329e77c978b691f17426e36943c6f314194f2d19cf33643c55643ca790f10c22e339978ce708329e96643c7dc9786e21e3994dc6f322194f27329e33c9785691f1ac24e3f9928ce778329ead643c5bc878da92f1ec21e39948c6b3808ca79a8ce735329e7d643c65643c83c9788e22e36945c6f33119cf4c329ee7c9785690f12c27e339918ce71d329ecd643c25643ca5643cf3c8786ac8785e21e3398d8c670819cf31643c8790f13c4dc6f32c19cfdb643c6f91f19c4cc6b3898c672319cfe1643cedc9787691f1bc4fc65344c093008e006cf2ff966093eff0ec03db173abf076cf20d9f37c0f6b9ce3f02b6872cb616163e61980e367957f60bb0c9fd9987c126ef4c7c0e36396f10ff6a7e6587fdf95bc032e2a7a5851ffd7d6ee1923c6e6f592615c4bbbdd1572ab07ff3aec8603cd83cef93f1ec22e3694fc6733819cf46329e4d643c2793f1bc45c6f33619cfb3643c4f93f11c42c6730c19cf10329ed3c8785e21e3a921e39947c6534ac65342c6b3998ce71d329e13c9789693f1ac20e3799e8c672619cfc7643cadc8788e22e3194cc65346c6b38f8ce735329e6a329e05643c13c978f690f1b425e3d942c6b3958ce778329e2fc9785692f1ac22e339938ca71319cf8b643cb3c9786e21e3e94bc6d3928ce708329e73c9780691f19c42c65345c6f30c194f2d19cf53643c6dc8783a93f16c23e379978ce758329e72329ed5643c6bc8784e27e379998c671119cf9b643c73c978ce27e3a920e36947c6731819cf49643cc3c978ce26e3798e8ce71c329e19643c5f91f1b426e3d94ec6b3838ce768329eb5643cebc8783a90f1bc4ac6b3988c670919cf7c329e0419cf09643ce791f10c23e3398b8ce705329e59643cc5643c1790f1ec24e3798f8ce748329ef5643c1bc8784e25e3799d8c672919cf32329e85643c13c878de20e339948ce738329ea1643c6790f1bc44c6339a8c670e194f25194f0b0bcf3e473cf2ad1859b7ccef6be6be771abe771688efed86efed05e27b9be17b5b81f8de62f8de5220be371bbe371788ef8d86ef8d05e27bbde17b7d81f85e6bf85e5b20be571bbe571788ef9586ef9505e27bb9e17b7981f87ecbf0fd5681f85e6af85e5a20be171bbe171788ef4586ef4505e29bf9fa5b7d274cfa2aefd2bf09f87f0530bee188719fc128f36f00a3d8f07bd4158e78a2aedd2b087c2b2de45e963cf34cc0ff2b81d1554c55188c326f8ba99dc053e98827ea9e4325816fa585bc8b2d7d2a13f07f1c7fd9554c551a8c326f8ba9edc0d3d7114fd4bd92be04be9516f2eeb3bcf39780ffe378ebae62aaafc128f3b698da063c831cf144dde31944e05b6921df0a936fd224e0ff383ea3ab981a6430cabc2da670fcdcc18e78a2ee4d0d26f0adb4906fedca372f13f07f1cbfc9554c0d361865de1653387edc10473c51f7d48610f8565ac8b360f9467b02fe3f14185dc5d4108351e66d3185e3dd0c75c413752f7028816fa5c5309d973e5609f8ff3060741553430d4699b7c5d47ae019e68827ea1ee63002df4a8be13a2fef7024e0ffc381d1554c0d331865de16536b8167b8239ea87bafc3097c2b2daa747e8dfe4dc0ffab80d1554c0d371865de1653ab81a7ca114fd43de32a02df4a8b6a9d976fce25e0ff38fefb70478c5506a3cc0f0746b1ad049e6a473c51f7baab097c2b2de4dbfe2bf46f02fe8fe3b1ba8aa96a8351e66d3185e341d738e289ba475f43e05b69315ae7654c9804fc7f3430ba8aa91a8351e66d3185e3578e76c413f56c6134816fa5857c9b6b99fe4dc0ff6b81d1554c8d361865de16534b81a7d611cf628367b1458b83e55b69217db997e8df04fc7f0230ba8aa95a8351e66d31b518782638e2897a963381c0b7d242beadfda6fe4dc0ff2702a3ab989a6030cabc2da61601cf44473c51cfa026e6c077d4f3945cf88e7a36900bdf51f7b973e13bea9e6d2e7c47dd7fcc85efa87b69b9f01d755f2817bea3ee71e4c277d4f57a2e7c475d7be6c277d475542e7c475d13e4c277d4f96d2e7c479dabe5c277d479876fcf7d7b1eb7ef8379ee50a8edf9c13c861ecc6389bf36f0d706b9f2ed8f25feda2057be0bf5dac0b7e7b96fcfe5faab2888be1e7bcb91efa5866f99c7e72c4b1df95e6cf896797c66b0d891ef45866f99c7fbdf8b1cf92e357ccbfca21cf86e67f86e9743dfed0ddfed2dbe1d6cef6422a87ffd2d0c38a5208f31f0a6032d1cd5b35cad77895ed7d731aed776dfc6dc5f4aa1cc12d0cf75db21eb36db8e7c64c6b8288acf7779027cc877c9944d9e1fbf063669f75f059bf40b78056c726c7a196cf24cea25b0c933ab17c1365ae73f069b3c3bc63efbf2fc7f1bd8aa741efb8a0fd7f92d6093be54d84759fac36d069bf469c4beb1d22f7523d8a46f31f6c994fee1ebc1267dfcb12fa0bca7b1166cf2ae0df64193f7a556836d8fce63df27f90ecd4ab04dd7f91560fb83ce2f07db833a7f0bd87eaff35f81ed773abf086c0fe8fc9b60fbadce2f01dbfd3aff02d87ea3f3cf83ed3e9d7f0e6cf7ea3cbecbf66b9d7f1f6c9fe93cbe43354de77782ed573a8fefeedca3f3dbc1f64b9d7f166c5375fe19b04dd1f98560fb85ce2f00dbcf757e3ed826ebfc3cb0fd4ce7e7826d92cecf01db4f757e36d8c6ebfc2cb0fd44e767826d9ccecf00db589d7f1a6c3fd6f9a7c0f6239dff126c77e9fc62b0b5d0f9a560933123b19f4ab1cebf05b6563a8ffd8fe4fbfe13c17688ce4f005b1b9daf059b7c1b6e34d8643ce81ab02574be1a6c253a5f0536393f1b0e3619ff6418d8e45c6a28d80ed7f9216093f39ec16093f12c07814dbe41da176c47e97c25d8e4dbfa15603b46e7f7814dc61c7b036cf2ddba3d6093b1981f069b7caf7a3ad84ed4f93f804dc66179106c27ebfcefc1768aceff0e6cf20dcf07c056a6f3bf055b079dbf1f6ca7e9fc6fc0266364dd07b63374fe5eb0c9d8c1bf069b7ceff933b075d4f969603b5be77f0536194be41eb0c9f8a0bf045b279d9f0a36f90ef714b09daff3bf009b8cf7f773b0c9378627834dc675fb19d8bae8fc24b02575fea760ebaaf3e3c1d64de77f02b6ee3a3f0e6c3d747e2cd87aeafc8fc1d64be77f04b6de3a2fed8cda9fd57ebe57cfa782f8cecb94bf0f83fa5343d706c2803c719e6b97020ffada1d7bdd93e9f37ad9ef5be8f54a0ced06dfbb62f79db9a6f840afab58af7797e1bb18ca9cad1b07b59c1cf35beae5f618cbe17d2c59b72c7301d8df37d6dd4ed7f70347f5dd65300937ea2065ced34cead8f8039d6f03cbc4c896be3e96580b40439c52901706375a25cbf1bcb7313c1f00cfeed87932d7eb2e6202f7adb8afd7cdfbb866ac9542995da0dffb0ef4c37d5dd62df3e2cf337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d333fb3e2d9abf3f85c59caed256114db6ee071719f1f9fc3cafad5739df74fadf3bb3b76bff59fefb5d2eb2d37ea5c0c65be86674e7b74be04fe2fdb2d6a5b3a784ed8e0b6147f25501f7c16b4d711cf6e8367b7450bc997c5e63b39d28dc6c972d597453d63df63e8bad7a2a9abfd75b75e5791a129eeaf1f1a3cf86cb404783fd2bf0958cf47500707fb78837121fe705fda0d36c97f088c2eb6331e4ba43d90e7e1f86c5acafcca782e1effb64f96bb6c37de833aa582fde3bb18cafc0edabecf751efb86ec05ddfe61f9bf4c0d3da716fd549d77c45fe7f4f6dd0e9c29f083bedf05d6987cd77b87a64827f123f662c8ff1dfa734839d143b416761caf1cd9cde53e34962b85323b2df54f05f1d67f87c1b3c36056dbe44b88b37fc0f1df559bb43342a30b402329b31b34dae38867b7c1231ce24f9591eddfda2823cb164399ff056d94aa8bb4f3524fecdb82c70057c731f125eb9679dbb9f107c068d651c5c7c063ea7877c7ce9b5ffdbf0e29cbfc62bb1e57ff2f59773bbdac7004c6facb61fdc2d53a883eb6fccff62dab5bbfcbfe657b8c3a0b0bea2c65da95657e559c5daaf3d99ceb1facebb6a873fd9d0e781241fd6b6f3535747cc763cc7bf07f2953fecda62e8eea596e3b76bd6fd4a914ca74847a3a388f69f05de01de0dbc536472de41c6a97a1453194e95096f995b6234a47bc56fd202775495acf07cb2d7591321dcbeaead206ec7132b9dc6eef429dd47a775bea2a65ce2babd3a5b3ce27603be17d93be96ffcbd4507b8063f16c8dbfcee9edbb053853e0077dbf03ac31f9aef72d1039df173f622f867c65595d5929277a88d6c2aef61179e70fd9cde57619cb9542996d96faa78278ebbfd5e0d96a30ab6dd2a5ac2e2f71e4b2dddc16a15139682465f0feb11cdbf1bd3bdb717fb723eea8e3fe6e6034db4d3c7771c9b6c76033efa1dace07a50c9e934999abca32bfaa9d4d58ca9af7865ddcc7c4775003a84760d455268c0107d786ddf0da49da29f1d319ecbb755e74ee6c68570c650695657e1d9e775bef5d9ad777784d21dce6be85ef7e0c29abe3c6b11377ebdf12b07da27f1d5da775b3dd33140edb3dc3e16575ecb8ac707d6ca98b798ddc22d8ff9efad74659bcefd6d07266de1c8752e9fb8951cee607af79627b57a34b793932b508ecf70b3e34d88b82fdc7dc94fd0063cebc8fd2d9580fde47a92dcbfc4a9b649655dbfedf8faad347b6a36887ed09c6e487c098d2f9f26f3675b1d55fe6c59f62fcc8a8839bb62bf3be5236f781f7008f8bb6dd511b5d8ec7d836b1adb77795edf8ffa1a1550e9fd75a8ff9e633f736463e1edfc96adbfd279b16bb2c3cae9ea34469b1cbe23b3e2d7a8cb41d3f6c5ae4b2ef439416ef5b7cc7a8450ddef76c488bf72c3c2eee4535a4c57b16dff169d1b3bca1e71aa8c54e0b8fab7b0f515a88bf6c99df27606e63e4e3f1ddadca769fcca6c50e0b8fabebe6282d76587cc7a745971e788fae212db65b78e2bf3fd7b016db2dbee3d3a2576fbc87d79016ef5a785c3dd38dd2e25d8bef18e36294ed5e8e4d8b6d169e6d39d6629bc5778ce7873d6cf7da6c5a6cb5f038b8efdaa0165b2dbe63d46204de776d488b2d169e2d39d6628bc5777c5a5475b7dd13b669f18e85c7d53de1282ddeb1f88e4f8b11bd94efcd8dd062b38567738eb5d86cf11de335543a2e3635428b4d169e4d39d66293c5777c5a54a7cfb53636428b8d169e8d39d662a3c5777c5a94a78fa91b1aa1c5060bcf861c6bb1c1e23bc6b8485f4fae6f8416eb2d3ceb73acc57a8bef188f23e9b858d7082dd65978d6e5588b7516dff1695193beffb4b6115aacb5f0accdb1166b2dbe63bce7928e8b358dd0628d85674d8eb55863f11d9f165dd3c7d4d58dd062b58567758eb5586df11d9f16a3d2cfc45635428b55169e5539d66295c5778ce79de9f6626523b45869e15999632d565a7cc778de99be7fb1a2115aacb0f0acc8b1162b2cbe636c3bd3e79dcb1ba1c5720bcff21c6bb1dce23bc6f3ceb4166f37428bb72d3c6fe7588bb72dbe633cef4c1f47de6a84166f59785c8d8112a5c55b16df31c645baed5cd6082d96597896e5588b6516df31ded74ab79d4b1ba1c5520b8fabf11aa2b4586af11de3f548fa1edf924668b1c4c2b324c75a2cb1f88ef15951fa1c7c7123b4586ce1599c632d1683ef3db1fbcef4e7161fd217eb7c438b6228734a87ccaff4c58ad251d681fdcab02e6fc65e974cbfb24511757913ea2265ce80bab4099c8c51d4cd515dd331f306d449adf7234b5da5cc391dea74e9a4f309d8261f836e7d2cff97a9c8984f415ef453757e2dfe3aa763f555e04c811ff4fd0ab0c6e4bb0bfa2ed249fc88bd18f2bd3bd4959572a287682dec6a1f795de791dd5c6eb1b15c299479dd52ff54106ffd5f33785e3398d3ef3d409c491cb969bb324caf4768743e682465b0cfde478e78cc3e84c221fe5419d9fead8d32d88752ca5c086d14f62b957a2682fdfb4d3a6acbba20bbac5be6c55f29d8f600a35947151f9f41df4f192b42c69150361917a22baca7a7615375ede5a8aee24bd62df3bd8051c6a9e8997bc66463197b188c8aa78f03cd70ec0d991a3a5ef4019ede0e781cd5337d1caa30ead4cba8532994c1771b2b1cd4b308fccaba65be027cbbd8e6a8851c93cf31b4288632c38df3c7281d651d2a7e7b5aead2cf715d64ddd22ef5cb81ef4ac37777c37722a8bf9d83a0e1fdab1298fb3a6056ebed1fff7acbf1bc4d624afc74873a0d000de2aa13ae4bcef30618da16437e2a9ce74939292bc72f6157b12cdb12d9cde5fa18cb9542997e96faa78278ebdfdfe0e96f30ab6d72179cdb39d81fd231d0cfe090f9eea05dff08edfa817652068f7f3d1c69d7d7e091f91ec023e7381560937305e14fc0ffbbe680db6cf72a2cdc62c371e27a5818bbc7cf983ed7e96130ca7c7760145b5fe0a974a499b9adcf31f4c1e3726ba38c2c5b0c6566c1b1316129abf6bb8e4575f56aa9edb1bd3ba6dbf4d60ef4c2711a03d02730340c402fa9672b073c6d83bab11a274fa99d34e2ce51378cca3c7a14b46203137f8b2cd5680136ccb7b4d882a0fe9094c5609321295b81ad85210b0e8529e565483b1772a11eb2ee6283b30db0c4e91b87f394a9a1d03904785c84b20a1d19d25387ce2d93c64c1985f1d1cae06c4aeca8ffb56ca05cd4ba5c6d07739f48c1bc1983c58efcb784faa6605efca96d53aaf313468cbc7bc0a43ba78e1b357eca6414cadcb1315f14d4df00e66f94e0ae763a0c00ac30360ead8c7a618321ff930dd3367ece6e3866aea94d00fe646a0bba1dea4037b57e19fb76e488b163af9b5a3576ccc84ba78e1f39654ced78dc9a6d0ce5a2b6b4fcbf35d86c4d3c965513365bb8ec21169b6dc25186db804d8e5c87824d78da82ad25e4a5bcb9659c846b4758bfec52ea7f4a9c56bae287047521208763d5aeaafd577d3e569d06a9a18ed5d0c66a73aaa18bd51d433534b1fa8a9d1a7a580d35ac86163e21c80c1dac860a3e39c80c05acbe7651166486f63d2dc80cdd7b4690199af72ce0fb36309f1d644ebbd4d0ba9d82ccd0b9ead6a57a755d7de64dbd5baf4edfd56d0175caab2ef1d4e9a73aed549717eaf685ba95a54ee9d4e9b23a1554a76fea72a4bfd67a40982e0cd34561ba384c9784e9d2305d16a6cbc3744598ae0cd35561ba3a4c03c3744d98ae0dd37561ba3e4c3784e9c630dd14648677be39c80cbfae867fbe35c80c0d7d5b901936faf62033a4f41d4166b8e911416628ea91416698ea51416608eb3b83ccf0d66382cc30b9770799a176c70599e17ad570d86a986c357cb61ae6570d09ac861456430dab6189d510c66a08643534f2fd4166c8653564f3434166d8e7e9617a244c8f86e9b1303d1ea627c2f46490191e5c0d1b3e23c80c33ae861f9f1d64862b9f1b64863757c39eabe1d0d530e96af87435acba1ae65d0dffae86857f314c2f85e9e520f348423d8a518f28d4ed7ff5184cdda27e33c8dc3a5f12641e71ab47feaa0b84ea12a2bac8ac08325da8549732d5c54e7539545d30559754d545577559565db8559776d5c55fbdf2a05e0151afc4a85784d42b53ea1532f54a9d7ac550bd26aa5ebb54af11abd7aa770799dbe27b83cca352753b5c3d1a50b7ccd5edfb4fc3f4ad201393df09d377c3f4bd307d3f4c3f08d30f83ccb0c66ab863355cb21a5a590dc3ac866c564339aba1a0d5b0d19f0599a1a7d5d0d5bf0d324362ff3e4c9f87e98b2033bcf69761fa6398be0ad39fc2f4e730fd254c7f0dd3dfc2f42f61fad730fd5b98fe1ea67f84e99f41dd30dbd8909ca05b1f7d05138c983265d4b80953caa6d4968d9b3a76ca980963ef2b9b3666cae8b2da7b464daa195b3b0d17feb65e58c6081f3069d288fbcac68caf1e756f59edd42965b5356555b553c757d73b88ff452f74d2fe1e475457473bfbcf6f42fa7f9be8f450dd2ecae8eb57345cb792964d10e488a62cd4a365d32a34491fc1e452f7c6cc7970d9e4b1b553cacacbc6877fc3036fedb451d59dcbf07f934391274f299b3c65c4a4296535936ac79575e98ceb7db86d132af15f6dddc09c7942d3c4e9a8bfb3d4a410fbe5a94d50e03f4e6d1a69ebb26f40dab6ac694ecbca9a50c3b39ab2d0954d24bca92c5296c953aba64c1a31724af4c2b77e9385ef684a35c737b19a27776882b3d39bb2d0800e4d23bca329ce6666e12cf86f5a25cf6384550600", "isInternal": false }, { "selector": { "value": 2603445359 }, - "bytecode": "0x1f8b08000000000000ffed9d77941cc5b5c67b3629cc8e562b6995c39264a55dcdcee6555ae52c106072d04a5a2119492ba4251963c08073ced938e300d838e28073ce09837304836d78ffbce377de3b87f3aa7aea7abf2d558f7786aed5ed9ddbe75c4df59d9abebffafa564d6f554feba9200852417eab54764670f246eff79ad7ec33db5a623c56d627672a219c1509e1ac4c0867554238ab13c2599310ce7109e11c9f10ce0931726ab68a60f81637ef440fbac6cd984e98a6b509d03493304d272540d3ba201963d4e48470d62784734a4238a72684735a42381b12c2393d219c3312c23933219cb312c2393b219c7312c23937219cf312c2393f219c0b12c2d99810ced312c2797a4238cf4808e79909e13c2b46cea5c0b9d0bc3ecbbc2e32af8bcdeb12f34a9f59665e9b4c1babcc7eb3b2e59a4d598bf55e4e59abb23665edd67b1dca3a957529eb36ef359af77a94ad50b652d92a65ab95ad313aac55b64ed97a651b946d54b649d966655b946d55b64dd976653b94ed54b64bd9d9cace51b65bd9b9cace5376beb2672bbb40d985ca2e5276b1c57289b24b955da6ec72655728bb52d91e657dcaf62adba76cbfb27e6507945da5eca0b243ca9ea3ec6a6587951d517654d980b263caae51765cd9096583caae55769db2eb95dda0ec464bb3e72abb49d9f394dd6c713e5fd92dca6e55769bb21728bb5dd91dcaee54f642652f52f662652f51f652652f53f67265af50f64a65af52f66a65af51f65a65af53f67a656f50f646656f52f666656f51f656656f53f67665ef302cd411dea9ec5dcaee52f66e65ef51f65e65ef53f67e651f50f64165772bfb90b20f2bfb88b28f2abb47d9bdcaee53f631651f5776bfb24f28fba4b24f29fbb4b2cf28fbacb207947d4ed9e7957d41d917953da8ec4bcabeacec2bcabeaaec6bcabeaeec1bcabea9ec5bcabeadec3bcabeabec7bcabeafec0796e63f54f623653f56f613e3fba979fd99a94bf3623f57f60b537ec8bcfed2bc3e6c5e1fb13ef32b65bfb67cbf51f65bcbf73b65bf37e53f98d73f9ad73f99d73f9bd7bf98d7bf9ad747cdeb63e6f56fe6f571f3fa8479fdbb79fd8779fda7797dd2bc3ea5ec9c867c797c30b4f506318d516d07b27a4d85c45f180cdfb41695e63d7a6d34fe2ab34fafa45db5d9afb6fc3566bfc63ace78b33fdef2d79bfd7acb3fd5ec4fb5fc0d66bfc1f2cf30fb332cff9966ff4cf0a7039873357eedab34ae14f8285f2bc0576d7c95e0aba1c3816f9cf155838fce6f0df82618df38f04d34bef1e04b1bdf04d25259adf1f50671e54ab64f1f3713f771cd3ad4a4f879f7e9e3d679e29d1c3f6fbf3e6ebd075e9d1f53ccb12643de4c35be7af04d33be29e03343d0bffb9cf64d37be69e09b617c0de09b697cd3c137cbf866806fb6f1cd04df1ce39b05beb9c6371b7cf38c6f0ef8e61bdf5cf02d30be79e06b34bef9e03bcdf81680ef74e36b041fdde3721af8ce34bed3c17796f19d013e1a6bcf041f5d1b9e657c7a9c189f82cf183f8d51e167687c06df221a9bc1b798c665f02da131197c4b2136f996c1b842be26e3a3314abfd763cabd415c7d2217f68915711f571d591f7755fcc70dd7ed560743baf6429c15a0d51a538ef1dea0168c9d324671c85f05e5ad5097ea911ef43d43ecfafb64a529af29f0b91eeb7319a8b3d2d1fede20def6afb2785659ccd5d07e3f39db9a939c1df15674ce5e0875eddca36b9eb198b33b80c343ce7648ce8e782b3a67fba1ae9d7b74dd3b1673f612e0f090b37d7e723697959ccdcf9105813bf7e86f9fb198b3078123fe9c6d979c1df95674cede0675eddca3bf7fc762ce5e071cf1e76c679f5c1b8c782b3a675f0575eddca3b998b198b3770087879ced977176c45bd139fb0ea86be71ecd0b8ec59c7d2d70c49fb3dd9e72b6557236c8af7706813bf7688e7a2ce6ec5dc0117fceee93f9d9916f45e7ec0350d7ce3d5a2f198b397baf29eb75869f9a7586b9e0fb99f1cd03def8737b7f9ba7dcce496ee7ef030902778ed2dadd58cced074d59e7f14370ef01f97e697ca781ef61e33b1d7c8f18df19d02e0f7da04ffac088b7a2fbc0afa1ae9dcbb48e3c16fbc08f81c343ceee939c1df15674ce3e0e75eddca37b1ac662cefe0e383ce46cbfe4ec88b7a273f65f50d7cebd45a63c167396ee2bd5d70b7f30d70b4bc0f747e35b0abe3f19df32f0fdd9f89ac0f717e36b06df5f8d6f39f81e35be2cf81e33be16f0fdcdf872e07bdcf85ac1f784f1b581efefc6d70ebe7f185f07f8fe697c9de07bd2f8bac0f794f1751b9f5eefa27bafbe6b7cfadc9246bd41bce796eeb1a463d3feb251885d67c5ae1bc5d8f556ec7a47ec260fb1d31083b694b5df0be526bf3cd94c30fcf71f146b79fcb15a75db9b8391b77d39f0643db43d0d3146c293059e96f879c27b7d73f11f373cc7cd96a66988d50ced6af5d0ae14c4a263d33ec5cb800fc7ef5607635bfc8cb914c4a263d37e1b30920fbf4fe87b9dfa8ffe3e5c981ae2f5d097c26b228cd70b1c14af0aea3c396da8ee12c3560befe3776b8be5f39497615e502c3a36ed53bc5a684fcbe833e646ca98b5187d8d11298845c7b663637f6f1a7dcd46745e33e03b056352aed431a916d846e33a25ea5c7389ede3fb2a0531686c23cd295e15d4995e395477338cbb1efa5faed8eb371c0fe2cfe35c16fbf548785a81c747dff7d45fb3f8bdff74106faeb55b5ab5585a65a04e1be8d7ee41bf42d721144f98855998855998855998855998855998855998855998855998855998855998f933e3fd17b8be49f5963161245f0e787cccf387cf8f32c7a2e3eb759d87615d27fe758b5c16d72ce91ec3c5569baba0ce13a921b6dfc07ababd36886b9acbfc6a37a2fb2c6a8393d7627dae2146ad03bbd62f1b638b9ddbe76bbd4d3f43453f87acd9d2759943530ff7a90cd33465698af7292eb578749eceaa1c62f3b1f657ec5a246a45e538d7f6f01e03bfe7253f7e502e5404c3c70ffc9ee9883df6f0354c5a2fefb06257419dff490d9d9b2e78bf3738f99e275da7d33a367d66317cb6d33a769df92c71d458c76f86cf529dff8331f59d15c1bf35f371ff078ecb01b415b75e28e3ba79fcdfc3f975fcd62278da81c7c738e3e97a238b7d20ee75fc4e4b2bd7750cd5e900fd3a3de8e7ba16a57d8a27ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccfc99f1b7a2c49a867a39268ca374ef43b89e41cf7fc1b5a997570cc5f5bd0e476b4e4bac3657419d1f540cb1bdda946b8393ef77883a971ed6f30a9e4b8a570bedc1b5205fbfe76eb378da1c5a50b931b6d8f975fcf8351e5ac76fb574cd3934f5d55f718d1535c5feda62f1e0da686d70f2bd256938ce68dc3b149517140ffb521bf8a88cbf8ff6719ef1bbc4beaf87e2e1faf5dd46dbbac0d7b9cf657d8e1bb4364f6bf5ad8eb6529d7b60ecbbcf94f11e0ebc77e441c7fbb4155aa726fdbc3ccb2e9b5ff7a567c0d1f9ed71c45e09ac31c56ec1d829631487fc5550fe62c5505daa477a90d6c4aefb083d130cd9edcfb5589fcb409d6e47fb7b8378dbdf63f1f458cc3a77ee873c7b10beff7d8d49dd111a2d068da80e5e07f9ba27cf1e23edfb1bf1bebd71561dbc66a13adf84312aeafe51d73d87bebec7a2ee39745d1bb703a3dd46fb3ecf72bf4feb21182fe2be4feb21c821bc4f2bb08ebf048e4f5ce382e8ef16aaf32bebf8f635397d06ef03a33abf85f1a2cedcb3581b9c7cfd8df74c8dc6df5751f749533cbcaec1befd9fdaae99bba07e6f8ccc9813c882f944751eb3ce596704f772c7679f88f82c69d564caf8f78bad9fd6a11b3ed31b8b0ef93edf63b585f2ba1bda4275fecbba068cffba257f0d187f5b875f93d038d0e6682bd5f96fe86bff826b3c3a4f385ed5549efc3e6d85ae01493fdde6d17e3e30c6e6f07ce0eacaa1baf6737e49eb629f0fdc617d8ee3f381ff17f2ac06ee43f73556af8cd06809684475f0b741f43d82cff2757dc7f8bab73fea3bc6f50c4a1cdbeb2a479fcd9e57735d23501dfa2c5e234c33cc754667bbae3d5f48df9771de378cbf956886b8f85b89664f7a6641b75ed8c7eb8253193beb2976d433a7b3a3103bea99d3a311bbde8a5d3f8ab14573d19c93e61e9e891cfefe0c9f59aab742d7a5c49081cf552480b132018c550960ac4e00634d0218c72580717c021827248071620218d3c0782abfdb3de8932b551f5fe7abd0b506c66ef2a44531ff7f87e7ff4ba5e0b50fc6f6f0375da8455330722df0ef3c1fcf7e28f6ff7a2106fcbf0ba62480716a0218a72580b121018cd313c03823018c3313c0382b018cb313c03827018c7313c0382f018cf313c0b820018c8d09603c2d018ca72780f18c04309e9900c6b312c0b8501863615cea9731572aa3e6f1f17ffe3d93ff73cc034fd675cfa9a7df9e14fdffad797e3e694ba9cf8dc37b4bfcfe9f70cfecd9763eee1d29f6d97685febf554f8cb952197dddc78ebfe319090ffe2ed2f5db1a0f8cb952197dfdfe057fa337129e0ed0acdda19907c65ca98cbeee952bf65e4ebca7bfc3a19907c65ca98c785f758c3ca1669d45f07481669d0ecd3c30e64a65f4755f721a628c84a71b34eb7268e68131572aa3a7dfb6859a7517c183bf01eb7668e68131572aa3e659e149b39e22785680663d0ecd3831224fdccfc9ee71c4f2f19bc162db4e0cc83821018c1313c088f749f818bf0add27d1e3579f5ca9faf83a5f85ee93c0d81e7e1f136a81bf87f84f5aacf2cb53f03e098cbdda9316f87b95ffa4c56ae0f1f1fb9934c418090f3164e0735312c03835018cd312c0d89000c6e909609c9100c69909609c9500c6d909609c9300c6b909609c9700c6f909605c900046fc5bd5c3b562c1bf5f568ff1d8517fab8cf5d8517f978cf5d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e439a7d84998e317c6b1c7883c8df1f164b1ed18ab9741db7b1d3c294f6dc7586b19b49d1892c6b826018c2b12c0283ae6ef412c8551f3acf3c4b3b6089e75c0b3de13cfba2278d603cf86f879c29c5a5f040f3164e0732b12c0b826018ca2a3e8c88951742c1f1d8551188551184f056312c670614c443ee64a65d43c1be3e70935db5004cf46d08c3ed7e29731572aa3e6d9143f4fa8d9c622783681661b1d9a7960cc95caa87936c7cf136ab6a9089ecda0d92687661e1873a5326a9e2df1f3849a6d2e82670b68b6d9a19907c65ca98c9a676bfc3ca1665b8ae0d90a9a6d7168e68131572aa3e6d9163f4fa8d9d62278b681665b1d9a7960cc95caa879b6c7cf136ab6ad089eeda0d93687661e1873a5326a9e1df1f3849a6d2f82670768b6dda19907c65ca98c9a6767fc3ca1663b8ae0d9099aed7068c69571450218d72480d1b38eb9521935cf2e4f3c3b8be0d9053c677be2d95504cfd9c0734efc3c614e9d5d040f3164e0732b12c0b826018ca2a3e8c88951742c1f1d85511885b138c6de0430cab91646ae8c1efebe2af81b9ab3c778ec3a2b765d99c48efa0dcd588f2d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e738abd3bfed8b9629f31b31b787c3cf3c6533bb3fab8e79a633d1da37e5aabf32cadceb6b4ca409d7341bff33ce89782b8746cdaa778c5323f8b01b3a7d8b949ea1813a0fd14638da5878e7fbea7b6478df5e78ff1d85163fd588f1d35d68ff5d892e792e7e5105bf25cf2bc1c624b9e4b9e73898de5ea60e8ba9d9e7faa8ff16c783f65b1eaad0aea9c332eff5a17481ff2115bfa907c5794436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf29c5f9e633e548c024f60f10405785633e3d9c68c6733339e2e663cf399f1b433e399c98c27c78c670a339e0dcc782630e359cc8ca79219cf5a663c59663c3b98f12c60c6b38419cf2c663c5399f14c64c653c58c671d339ee5cc787632e3d9ce8ca78719cf42663cddcc783632e3e960c6339b194f2b339e69cc789632e34933e36966c653cd8c670b339e26663c8b98f1ec62c6b39219cf1c663c0dcc786a99f16498f1d430e359c58c672b339e4dcc783a99f1cc65c6d3c68c673a339e65cc782631e3a963c6b39e19cf38663cf398f1cc60c63399194f3d339ef1cc7846e37943c5f0a418f0a483939f499686f77783afc2faac1eaf5a1a86debfc0f82be033179a72a5e3d817808f7e1b7ea1e3b3a8d305d0965e53ce3eb32dd40963f5c23ec5ab058e0b99f0ec66c6339e194f3d339ec9cc786630e399c78c671c339ef5cc78ea98f14c62c6b38c19cf74663c6dcc78e632e3e964c6b38919cf56663cab98f1d430e3c930e3a965c6d3c08c670e339e95cc787631e359c48ca78919cf16663cd5cc789a99f1a499f12c65c6338d194f2b339ed9cc783a98f16c64c6d3cd8c6721339e1e663cdb99f1ec64c6b39c19cf3a663c55cc782632e399ca8c6716339e25cc781630e3d9c18c27cb8c672d339e4a663c8b99f14c60c6b38119cf14663c39663c3399f1b433e399cf8ca78b19cf66663cdb98f1ac66c653e1e0f1f0ff5f863c74ff1a1d9bf6773389ede13c84ffefe7459eda74b139568d392ef153bc2aa87389b930d0f7a3e06789cbbedf10ef9dbb1834bad8535be87ca4acf3e339760eefab0c8021b0f4091c3c3eee47f5d4ce617918e3ff3f9bd55a5d6269659fbb0cd4b908f4bbc4837eaedcfe771f30af4964d63cf4dd41ac69a8b79a0923f9cef7cb13f6dbd5c1f0ad50bfbd04787c8c619eda19f6af4bad36ad76e84e7530572ff5d04e57dfa1fd4be13c248d59f3ac3565624d43bdb54c18c977b15f9eb07fad0d866f85fad7a5c0e363fcf1d4ceb07f5d66b569ad4377aa83b97a998776bafa0eed5f06e72169cc9a679d29136b1aeaad63c248be4bfcf2b4a5a1cdb415ea5f97018f8ff1c7533bc3fe75b9d5a6750edda90ee6eae51edae9ea3bb47f399c0761166617b3e6a1df98106b1aeaad67c248be4bbdf2b465d3d066da0a8d6397038f8f71de93eee1387685d5a6f50edda90ee6ea151edae9ea3bb47f8523766310af16578e408b2b1d3c578eb21614af58e68b12c82c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e8ac37d15974169d45e738984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da39839e8ac79e81931c49a867a1b983092ef32bf3ce1ef823604c3b794b5df0be52b81e7720ffa786a67780ff91eab4d1b1cba531dec5f7b3cb4d3d577687f0f9c873d45305f914066d1b93466cd43cf8a25d634d4dbc884917c97fbe509c7b18dc1f0add038b607787c8cf39eda198e637d569b363a74a73ad8bffa3cb4d3d577689fe209b33047316b1efa3f6c88350df536316124df955e7972e1ef1b3705c3b742e3581ff0ec899d273f8e79d03d1cc7f65a6ddae4d09dea60aeeef5d04e57dfa1fdbd701e8a61be2281cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a978fce9a87feef10624d43bdcd4c18c9b7c72b4f6bb8eeb03918bea5acfd5e28ef059ebed879f2eb0e1e740fd71df6596ddaecd09dea60ffdae7a19daebe43fbfbe03c8c75e62b12c82cb9313acc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc1c7243f36c3165624d43bd2d4c18c9d7e797277ceec19660f856e8be9d7dc0b3d7833e9eda19deb7b3df6ad31687ee5407fbd77e0fed74f51ddadf0fe7419885d9c5ac79b69a32b1a6a1de56268ce4dbeb97271cc7b606c3b742e3d87ee0f131ce7b6a67388ef55b6ddaead09dea60aef67b68a7abefd07e3f9c0761166617b3e6d966cac49a867adb9830926f9f5f9e701cdb160cdf0a8d63fdc0e3639cf7d4ce701c3b60b5699b4377aa83b97ac0433b5d7d87f60fc07910666176316b9eeda64cac69a8b79d0923f9f6fbe5c9a5a1cdb4151ac70e008f8f71de533bc371ec2aab4ddb1dba531dccd5ab3cb4d3d57768ff2a380f4963d63c3b4c9958d3506f071346f2f5fbe509fbd78e60f856a87f5d053c3ec61f4fed0cfbd741ab4d3b1cba531dccd5831edae9ea3bb47f10ce43d29835cf4e5326d634d4dbc984917c07fcf284fd6b67307c2bd4bf0e028f8ff1c7533bc3fe75c86ad34e87ee540773f5908776bafa0eed1f82f3903466cdb3cb9489350df5763161241f7e5fecf2c493b178320e2dc662ec3a2b765d99c4aeb762d797496cc973c9f372882d792e795e0eb125cf25cfcb2176b9e69a685e9e9aa74ea1e6a953a8794a3467a9f9d3f1c56ec771a502621df4d44edc7aa18cf373b47531e399cf8ca79d19cf4c663c39663c5398f14c60c6b398194f25339e2c339e05cc789630e399c58c672a339e89cc78aa98f12c67c6d3c38c6721339e6e663c1dcc786633e36965c6338d19cf52663c69663ccdcc78aa99f13431e359c48c6725339e39cc781a98f1d432e3c930e3d9cd8ca78619cf2a663c9dcc78e632e36963c6339d19cf32663c9398f1d431e319c78c671e339e19cc782633e3a967c6339e194f8a014f3a38f9f728f87b824af0d1fdfdbbc0f71c53de0dbe0a470c3ace21f0d1fc291d438f372b1b4e66a880cf5cede07a8e231ec5b9daf1d9d1d01d63f5c23ec5ab058eab99f08c67c653cf8c6732339e19cc78e631e319c78ca78e19cf24663ccb98f14c67c6d3c68c672e339e4e663cab98f1d430e3d9cd8c27c38ca796194f03339e39cc785632e359c48ca789194f35339e66663c69663c4b99f14c63c6d3ca8c6736339e0e663cddcc781632e3e961c6b39c194f15339e89cc78a632e399c58c6709339e05cc78b2cc782a99f12c66c6338119cf14663c39663c3399f1b433e399cf8ca78b194f858367b7279ea8e729ec66105bef674117bda5e1fdd1f81de06e8b91f60f0223f2124fd6134fd43328b20c62ebf6d3df12b4069786f7f1775cbe722a6b31d2be2ba7f0beb4e59e78a29edbb19c416cad05cd5dd23d0069781f7fb7e02ba7965b8cb4efcaa97abf3ce1ff2dd1140cdf0add6b847dcec739f4d4ce2cf6bf189fa1e17c167593a5153e437534ee938f1a0f289e300b7314b3e6a1b50b62c5efb3d1f8dddb48185ddfaf1e78c2f1b13918be151a1f0f028f8fef0f4fed0cc7b1c3569b9a1dba531dccd5c31edae9ea3bb47fd811bb3188578b2323d0e28883e7c8286b41f18a65de9d40660e3a6b9e65a64cac69a8b78c0923f9b27e79c2f17159307c2b343e1e011e1fdf1f9eda198e0947ad362d73e84e75b07f1df5d04e57dfa1fda3701e8a613e9c4066d1b93466cd4373c8c49a867a39268ce43be89527974d439b692b348e1d051e1fe3bc27ddc3716cc06a53cea13bd5c1fe35e0a19daebe43fb03701e845998855998855998855998855998855998855998855998855998855998859937b3e6a1df36126b1aeab5326124df11af3cf97587d660f85668dd6100787caccb78d23d5c773866b5a9d5a13bd5c15c3de6a19daebe43fbc7e03c08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300b336f66cd43cfdc26d634d46b63c248bea37e79c2df6db505c3b742eb0ec780c7c7ba8ca77686eb0ed7586d6a73e84e753057aff1d04e57dfa1fd6be03c08b330bb98350f3ddb8a58d350af9d0923f906bcf2e4d74fdb83e15ba171ec1ae0f131ce7bd23d1cc78e5b6d6a77e84e7530578f7b68a7abefd0fe71380fc5301f4e20b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcee5a3b3e6a1ff738d58d350af830923f98e79e5690dd71d3a82e15ba17587e3c0e3635dc693eee1bac309ab4d1d0edda90ef6af131edae9ea3bb47f02cec358673e9c4066c98dd16196dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e62e6901b9aa7d39489350df53a993092ef1abf3ce1730f3a83e15ba1fb764e00cf710ffa786a6778dfcea0d5a64e87ee5407fbd7a08776bafa0eed0fc27910666176316b9e2e5326d634d4eb62c248bee37e79726968336d85c6b141e0f131ce7b6a67388e5d6bb5a9cba13bd5c15cbdd6433b5d7d87f6af85f3903466cdd36dcac49a867add4c18c987dfcbdd9e7832164fc6a1c5a98aadf77b4cb9d6bca6e1fd1e60f4351e765b8cb48f398ebcc4d3e389a7cee2a9736871aa62ebf6af34e549e6350defaf04465f39d56331d2be2ba7ea8067a5279e7a8ba7dea1c5a98aadb55865ca93cd6b1ade5f058cbe726aa5c548fbae9caa079e559e78a2c6a455a3103baa7f8d46eca85c198dd8a2b9682e9a8be63e354f9d42cd53a750f39468ce4a730fd751e17c2fc5088001b75e28e3df0a3eae3d3db533ebfa7b6c95d526fc7b0ce71c4ed5df1bc22ccc51cc9ee62ddad2566cd227b078681bf4acc568ce9bf6586d4ac2bc6921e6c30964169d4b63d6b1af8b3f765bda8a4dfa04160f6dd779d6c2533bc3f1e0fac0ad31c5cb401dccd3eb3db4330571e9d8b47f3d9c8762980f279059742e8d59c7be21f6d8f9e7c9636cd227b07868bbc1b3167eda991f0f6e0cdc1a53bc0cd4c13cbdd1433b5310978e4dfb37c2791066611666611666611666611666611666611666611666611666611666611666decc3af673638f9d9fbfc7d8a44f60f1d0f65ccf5af869677efefea6c0ad31c5cb401d3ce7377968670ae2d2b169ff26380fc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc2cc9b59c77e5efcb1c3dfe3606cd227b078687b9e672d3cb5339cbfbf39706b4cf1325007cff9cd1eda9982b8746cdabf19ce83300bb38b59c77e7eecb1f3eb79189bf4092c1eda9eef590b3fedcc8f07b7046e8d295e06eae039bfc5433b5310978e4dfbb7c0792886f97002994567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a59742e1f9d75ec5b638fdd1acedf636cd227b07868bbd5b3167eda999fbfbf2d706b4cf1325007f3f4360fed4c415c3a36ed53bc72603e9c4066c98dd16196dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e62e6901b3af60be28f1dfe9e1d63933e81c543db0b3c6be1a99de1fd2fb7076e8d295e06ea609edeeea19d29884bc7a6fddbe13c08b330bb9875ec3be28f9d4b5bb1499fc0e2a1ed0ecf5a786a67381edc19b835a67819a883e7fc4e0fed4c415c3a36eddf09e72169cc78fe52f1c50eefdba41815e655fb5e68ca95e07b91295781efc5a65c0dbe9798720df85e6acae3c0f732681bf95e6eca4bc1f70a535e05be579af24af0bdca947bc0f76a53ee06df6b4c79107caf35e56bc1f73a53be0e7caf37e5ebc1f70653be017c6f34e51bc1f726537e2ef8de6cca3781ef2da6fc3cf0bdd5946f06dfdb4cf9f9e07bbb29df02be7798f2ade07ba729df06be7799f242f0dde5f0bddb945f00bef798f2ede07baf29ef06dffb4c7902f8de6fca13c1f70128d3eb074db9167c779b72067c1f32e549e0fbb029d781ef23a63c197c1f35e57af0dd63ca53c077af294f05df7da63c0d7c1f33e506f07ddc94a783ef7e539e01be4f98f24cf07dd2946781ef53a63c1b7c9f36e539e0fb8c29cf05df674d791ef81e30e5f9e0fb9c292f00dfe74d19cfef174cf90ef0d1b87227f8685c7921f8685c7911f8685c7931f8685c7909f8685c7929f8685c7919f828ef5e0e3ecabb57808ff2ee95e0a3bc7b15f828ef5e0d3ecabbd7808ff2eeb5e0a3bc7b1df828ef5e0f3ecabb37808ff2ee8de0a3bc7b13f828efde0c3ecabbb7808ff2eeade0a3bc7b1bf828efde0e3ecabb77808ff2ee9de0a3bc7b17f828efee021fe5ddbbc14779f71ef0359af27bc1779a29bf0f7ca79bf2fbc1778629e33873a6297f107c6799f2dde0a3b1f043e07b96297f187c8b4cf923e05b6cca1f05df1253be077c4b4df95ef02d33e5fbc0d764ca1f035fb3297f1c7ccb4df97ef0654df913e06b31e54f822f67ca9f025fab297f1a7c6da6fc19f0b59bf267c1d761ca0f80afd3943f07be2e53fe3cf8e87b9cc619dd9f75bf241d4823eda336373bda42bef1d096de20de6b3a8a45c7a6fd5660a473901b7dc6dc48195b2c46cdd3ee4133cc2bda0afdcdd40e3c6d1e783cb533fc9ba9c36a53abd5a60cd47916b4b3c3433b5310978e4dfb1d10dbc739472d6acc7117595a54419d6af385a6bf4f0be948c7d0f99b73b4a5db735be8d8342e758f42ec4e2b76d68a8de3316d85fa572730777960d6c7ed89ffb861ff5a618e45394571b2d0a695a0415c6dc2d829631487fc55509edd305497ea911ef4fd45ec3a97e95c22bbfdb976eb7319a8d3ed687f6f106ffb7b2c9e1e8b595fd3d7350c7178e80f610e745b1cb49f05ed7a22b4eb06eda80e7eff3579d2aecbe2a1fd26e0a16b9c0ef0d1b502f1e37556f32870dbe35e87839b7c9dc0d8e460ccc5cf185eeb34598cb49f0346f275014fa727cdec73bdc8d207bf97c75975e8b3555067397c37a61d7575bf5b981a6a17fd0dfe7410ef985ee3412f9c1f08409fc0d2903662181f0ccd21c4c93331189a2338313870bcefaafe73fbfbf6a700adcac2c4d794a31915e0c372a5c31704c3a742704a96a642704ab6c29205a760a8befe534a378ba61bfa8f1c1a7cf6d1fea3fb8edf786cb07fff8e81ab90badaa247d2a8162029fa681b1f0c4ddaf406f12ec6d458b10a25cf78781d07ef539dec33db5a3cb533fcd29b60b5a9c66a5306ea54c37b133cb4330571e9d8b43fc1113bc68128d462e208b498e8e09938ca5ae0c437f9b0a7d2fbb8785261b5057b34b6c9cef3581b440117c2f153064ebfa73b7bb569ccb860e864d3e8a9af68f549d033a6fa5b4bcf88ea19503d04e9194e3da3a9bfd4f48ca59ea1d433927a0652cf38ea19463da3a86710f58ca19e216c0cf233807ac64fcff0e919bdb380edbbc0abffaad6df907a464ecfc0e919377d65a5af00f4d588befad6578a7af6435f21e8bf2cf52c83feb6d55732fa5b5a7fb3ea2b457d85a8afe8f515ae5ea55aad6c8dd17aadb275cad62bdba06ca3b24dca362bdba26cabb26dcab62bdba16ca7b25dcace56764e909f5d3f57d979cace57f66c651728bb50d945ca2e567689b24b955da6ec72655728bb52d91e657dcaf62adba76cbfb27e6507945da5eca0b243ca9ea3ecea207f87ce116547950d283ba6ec1a65c7959d08f22b667a854caf88e91530bde2a557b8f48a965ec1d22b567a854aaf48e915a85b83fc0a935e29d22b437a5540af02e8597f3dcbffe2203f8baf67ed5f16e467e5f52cbc9e75d7b3ec7a565dcfa2eb59733d4bae67c5f52cb89ef5d6b3dc7a565bcf62eb596b3d4bad67a5f52cb49e75d6b3cc7705f959643d6bac6789f5acb09e05d6b3be7a96f7ee203f8bab676df52cad9e95d5b3b07ad655cfb2ea59553d8baa674df52ca99e15d5b3a07ad653cf72ea594d3d8ba9672df52ca59e95fca2b207957d49d997957d45d957957d4dd9d7957d43d937957d4bd9b7957d27c8e7e5f7947d5fd90f94fd50d98f94fd58d94f94fd54d9cf94fd5cd92f943da4ec97ca1e56f688b25f29fbb5b2df28fbadb2df29fbbdb23f28fba3b23f29fbb3b2bf28fbabb247953da6ec6fca1e57f684b2bf2bfb87b27f2a7b52d953c1d0ea060e22ff323b34d3de3738d87fe4d860e3e040e3916b0f0f1e3a76f8c6c6eb0f0d1e6c1cb8aefff881c303d7e3873f68862d5a46587bfc78df8d8d878eeeefbfa171e0dac1c681038d7b07ae3dbaff047ee81be643734f8ed8b77f7f74b05f543c03d2474a0cfaa8f91c2dd06c2ddcb6c74b11e4a9523e34b5b2b4069d6dbe75e8aff7f3f257bb8d270e0f0c36661b8faa7ffb0eabcff4ef6f6ec4f74e28914f0c369e18ec3b3ed878e0f8c091c696663ceec5134a68445543091f6a6e1879cb83ff072748e4d5250a0400", + "bytecode": "0x1f8b08000000000000ffed9d77741cd775c667d158164b1024c15ea046b3015c2c1a0136b0774a9464f5429004455a24419150b32c4bb224f7debbe516cbbdf758a97612274e1c3b96bbe36e4b2eca3f39ce49cef1c97bb3ef1a1f1e67d658682e78077be79c8b7d73f7eddcdffbe6ce9bd9f766074f054190098a4bb5b18b8273177abfcfbde69fded296e0b6f29c9c99947056a584b33a259c3529e1ac4d09675d4a3827a58473724a38a724c869d9aa82914bd2bc5319744d9a319b324deb53a0692e659a4e4b81a60d413afaa8e929e16c4c09e78c9470ce4c09e7ac947036a58473764a38e7a484736e4a38e7a584737e4a3817a48473614a3817a58473714a3897a484b339259c17a484f3c294705e9412ce8b53c27949829c2b8173a97b7d867b5de65e97bbd715ee953eb3cabdb6b836d6b8f55663ab2d9bb136efbd82b176631dc63abdf7ba8c751b5b63acc7bdd7ecdeeb35b6d6d83a63eb8d6d30b6d1e9b0c9d866635b8c6d35b6cdd876633b8ced34b6cbd86e637b8ced35b6cfd87e63971abbccd80163971bbbc2d895c69e69ec2a63571bbbc6d8b51ecb75c6ae377683b11b8ddd64ec6663078df51b3b64ecb0b123c6068c1d35768bb163c68e1b7b96b15b8d9d3076d2d8296383c64e1bbbcdd81963678d0d19bbddd81dc6ee347697b1bb3dcd9e6dec1e63cf3176afc7f95c63f719bbdfd803c69e67ec41630f197bd8d8f38dbdc0d80b8dbdc8d88b8dbdc4d84b8dbdccd8cb8dbdc2d82b8dbdcad8ab8dbdc6d86b8dbdced8eb8dbdc1d81b8dbdc9d89b8dbdc5d85b8dbdcdb1d081f07663ef30f688b1771a7b97b1771b7b8fb1f71afb0b63ef33f6a8b1f71bfb80b10f1afb90b10f1bfb88b18f1afb98b18f1bfb84b14f1afb94b14f1bfb8cb1cf1afb9cb1cf1bfb82b12f1afb4b635f32f698b1bf32f6d7c6fec6d8df1afb3b637f6feccbc6be62ec1f8cfda3b17f32f65563ff6cec5f8c7dcdd3fc5f8dfd9bb1af1bfb77e7fb867bfda6ab4be362ff61ec5baefcb87bfdb67bfd8e7bfdaef799ef19fbbee7fb81b11f7abe1f19fb4f57feb17bfd897bfda97bfd997bfdb97bfd857bfda57bfd957bfdb57b7dc2bd3ee95e7fe35e7feb5e7fe75e7fef5e9f32765953b13c39185efa8284faa88ea3793ba742e22f0d462e568b6af71ebd363b7f8d5ba757d2aed6add77afe3ab75ee76d67b25b9fecf91bdd7aa3e79fe9d6677afe26b7dee4f9e7b8f5399eff62b77e31f8b3018cb93abff5553b57067c94af55e0ab75be6af0d5d1e6c037c9f96ac147fbb70e7c539c6f12f8a63adf64f0659d6f0a6969acdef9fa82a47225df6fb79b4b7abb6e1e6a5af2bc87ed761b9878a727cf3b60b7dbc8c06bf36386dbd674c89b99ced708be59ce37037cae0bfad331677db39d6f16f8e6385f13f8e63adf6cf0cd73be39e09bef7c73c1b7c0f9e6816fa1f3cd07df22e75b00bec5ceb7107c4b9c6f11f89a9d6f31f82e70be25e0bbd0f99ac147f7b85c00be8b9def42f05de27c17818ffada8bc147d78697389fed272667e033ce4f7d54f819ea9fc1b78cfa66f02da77e197c2ba84f06df4a884dbe55d0af90afc5f9a88fb2eff5ba725f90d43151088f89b5496fd76cd96e777df2db0de7ed3604c35af7419cb5a0d546574ef0dea0368c9d714671c85f03e55d5097ea911e749e21767b3e59e7ca1b4b7caed7fb5c0eeaac8b687f5f906cfbd77b3ceb3de65a683f4fceb617346747bd949db357435d3ff7e89a6722e6ec5ee060c8d92ecdd9512f65e7ec00d4f5738fae7b2762ce5e071c0c39dbcf93b385bce66c718c2c08a2738fbefb4cc49c3d061cc9e76ca7e6ece897b273f601a8ebe71e7dff9d88397b0770249fb3ddfd7a6d30eaa5ec9c7d05d4f5738fc6622662ce3e041c0c393ba0fdeca897b273f66d50d7cf3d1a179c8839fb6ae0483e677b9872b65d733628ce77064174eed118f544ccd9478023f99c3dace3b3a35fcaced9cf435d3ff768be6422e6ec475cd9ce337cc3cd332c04df379d6f11f0269fdb473a9872bba0b95dbc0f2408a27394e6ee26626e3fe6ca368f1f877b0fc8f76de7bb007cdf71be0bc1f75de7bb08dac5700cf4eb3130eaa5ec63e0fb50d7cf659a479e88c7c0d7818321670f6bce8e7a293b679f80ba7eeed13d0d1331677f041c0c393ba0393beaa5ec9cfd03d4f5736f992b4fc49ca5fb4aedf5c28fddf5c20af0fdc4f95682efa7ceb70a7c3f73be16f0fddcf95ac1f70be75b0dbe5f3a5f1e7cbf72be36f0fddaf90ae07bc2f9dac1f7a4f37580ef37ced709bedf3a5f17f87ee77cdde0fbbdf3ad01df53ced7e37c76be8beebdfaaaf3d97d4b1af505c9ee5bbac792b64debabc621768317bb611c63377ab11b2362b730c4ce420c5a32de7a1f945b7879f2b960e4ef3f28d6eae463b5dbb6b706a36ffb6ae0c933b43d0b3146c393079eb6e479c27b7d0bc96f37dcc7ad9ea65988d50aed6a6768570662d1b6699de2e5c087fd777b046347f28c850cc4a26dd37a0730920fcf27745ea7e3c79e0f97668679198ea5f09a88e2d1b3bf886335f8a9ceef670db3ad706cf5f03e9e5bdb3c1f535e867941b168dbb44ef1eaa13d6de3cf58182d63de63e4ea2332108bb6edc7c6e3bd65fc351bd57ecd81ef3cf44985b1f649f5c0361ed72971fb5a4a6c8ef355066250df469a17c04f7566bb1f24d8be6d07f4bb0cc75fa1dceb37ec0f92cfe3421e8febd1f0b4030fc7b1cf74bce6f1bcffc720d95cebf4b46af3b4ca419d0ed0af9341bf52d721144f99955999955999955999955999955999955999955999955999955999955999e533e3fd1738bf49f5560961245f017838c6f9c3e747b96dd1f6edbcce77605e27f9798b421ee72ce91ec3e55e9b6ba0ce9399e1ba3f80f9747f6e10e73457f16a37aafb2cea8373e76239e710e3e681a3e62f9b138b5d38cc35df669fa1629f43d6eae9ba2a425386fb5446689af134c5fb14577a3c364fe7550fb371ccfd953b17895a5139c9b93dbcc78077bf14fb0fca85aa6064ff81e799aec4638f9cc3a4f9f22e2f760dd4f99fccf0bea17b51e9ff1cfaf73cd93adddeb6e933cbc1dfed6dbbc17d96386abdedb7c267a9ceff419ffaf6aae04f9a71dcff81fd72006dc5a50fca386f9efc79b8388fdf5e064f27f070f4334cd71b793c06929ec7eff6b48aba8ea13a5da05f37837e51d7a2b44ef194599995599995599995599995599995599995599995599995599995599995593e33fe569458b350af2084719cee7d08e733e8f92fb47d3baff3d2aae1b8dcf37034e7b4c26b730dd4f95ad570dd57ba727d70eefd0e71fb92613eafe4bea478f5d01e9c0be2fa3d7787c7d311a105959b138b5d9cc74f5ee3e179fc764fd74284a65cc72bceb1a2a678bcb6793c38375a1f9c7b6f4916b6331ef70ec5e505c5c363a9037c54c6df4773ec673c97f8f7f5503c9cbf7ed469db1070edfb429eb3df58036dea0bcecdef1aa8f361e8fb3eeaca780f07de3bf258c4fbb4949aa726fd589e65972fcefbae05ce3e8883b1d7016b42b1db3076c619c5217f0d94bf54355c97ea911ea435b1db63849e0986ecfee7dabccfe5a04e4f44fbfb8264dbdfebf1f47acc769f7c02f2ec3138ff73f5493d311a2d078da80e5e0771dd93e7f791fefd8d78df5e9d5707af59a8ce57a08f8abb7f34ea9e43aef358dc3d8751d7c69dc0e8b7d1bfcfb3d2efd37a1cfa8ba4efd37a1c7208efd30abcedaf80ed13575d107f6ea13adff3b6ef5f93d367f03e30aaf343e82f1adc3d8bf5c1b9d7df78cfd4787cbf8abb4f9ae2e1750d1edb7faeed96790dd4ef4b9019730259f03a81eafccadb67dd31dcab233efb64cc6749ab1657c6ef2fbe7e56871ef84c5f223a148ff95eaf2d94d73dd016aaf35fde3560f2d72dc56bc0e4db3af29a84fa818e88b6529dff8663ed0f708d47fb09bf77d4559ffb3e2da5ae01493fdbe6f17e3e30c696f07ce0daeae1bafe737e49eb729f0fdce57d4ee2f381ff17f2ac0eee43e7eaabd7c568b40234a23af8db203a8fe0b37ca3ce315cf7f6c79d63a29e4189fd7343f5f8b3f9e36a51d70854873e8bd708b31c7383d3d9afeb8f17d2f932c9fb86f1b712ad10177f2bd1caa4671e74eb8375bc2e389fb1f34cb1e39e399d1f87d871cf9c1e8fd88d5eecc6718cad9aabe6923467782672f8fb337c66a95d4a5d9712430e3e579502c6ea1430d6a480b136058c7529609c9402c6c929609c9202c6a92960cc02e3f93cb733e85318ab3e5cfbabd4b506c66e61d2a29cffdfc1fcbf544a5efb606c86ef74a1162dc1e8b5c0ef791ccf7e28f77fbd1003feef821929609c9902c65929606c4a01e3ec1430ce4901e3dc1430ce4b01e3fc14302e4801e3c214302e4a01e3e214302e490163730a182f4801e3852960bc28058c17a780f19214302e55c6441857f23216c6ca687938fee7dfd3f99f630c3cf9a87b4e997e7b52f6ff5b637e3e69db589f1b87f796f0fe4fb8a7f76c3b8e7b47ca7db65da9ffb7cac458182b23d77decf83b9ed1f0e0ef22a37e5bc3c058182b23d7ef5ff0377aa3e1e902cd3a233463602c8c9591eb5eb972efe5c47bfabb223463602c8c9511efab4e9027d4acbb0c9e35a0597784660c8c85b13272dd979c8518a3e1e901cdd64468c6c058182b23d36fdb42cd7acae0c1df80f54468c6c058182ba3e559cba4596f193c6b41b3de08cd2431224fd2cfc9ee8d88c5f19bc172db4e0cc83825058c5353c088f74970f45fa5ee93e8e5d5a730567db8f657a9fb243036c3ef63422df0f7107f4e8bf5bc3c25ef93c0d81b98b4c0dfabfc392d36000fc7ef67b21063343cc49083cfcd4801e3cc1430ce4a0163530a1867a780714e0a18e7a680715e0a18e7a78071410a1817a68071510a1817a78071490a18f1bb2ac3b562c9ef2f1b2678ecb8ef2a133d76dcf792891e5bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73c97143b0d63fcca38f11891a739399e3cb61d63f509687b5f044f86a9ed186b9380b61343da1837a680716d0a1855c7e23d886361b43c9b99783695c1b31978b630f16c2e83670bf06c4d9e27cca92d65f010430e3eb736058c1b53c0a83aaa8e921855c7cad1511995511995f17c30a6a10f57c654e46361ac8c96675bf23ca1665bcbe0d9069ad1e7da78190b6365b43cdb93e70935db5606cf76d06c5b84660c8c85b1325a9e1dc9f3849a6d2f83670768b63d423306c6c258192dcfcee47942cd7694c1b31334db11a119036361ac8c966757f23ca1663bcbe0d9059aed8cd08c81b1305646cbb33b799e50b35d65f0ec06cd764568c6c058182ba3e5d9933c4fa8d9ee3278f68066bb233463602c8c95d1f2ec4d9e27d46c4f193c7b41b33d119a313016c6ca6879f625cf136ab6b70c9e7da0d9de08cda432ae4d01e3c6143032eb58182ba3e5d9cfc4b3af0c9efdc0732913cffe32782e059ecb92e70973ead232788821079f5b9b02c68d2960541d5547498caa63e5e8a88ccaa88ce531f6a58051f7b5324a6564f87e55f23734974ef0d80d5eec860a891df71b9a891e5bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73c9714fb40f2b10be53e63e600f0703cf386a99d79bbddcbddb6fe98a07e56ab2b3cad2ef5b4ca419dcb41bf2b18f4cb405cda36ad53bc72999f2180992976619ad9c614683fc5d8e8e961e35fc9d4f6b8befeca091e3baeaf9fe8b1e3fafa891e5bf35cf3bc12626b9e6b9e57426ccd73cd7329b1b15c1b0c5fb7d3f34fed369ee9ca356e1d59c94f752e9b547c6d08f418e288adc7909e2b2a21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad792e2fcf311faac68127f07882123c1b84f1ec16c6b34318cf1a613c8b85f1740ae3992b8ca7208c6786309eadc278a608e3592e8ca75a18cf26613c79613c7b85f12c11c6b34218cf3c613c3385f14c15c653238c67b3309ed5c278f609e3d9238ca75718cf52613c3dc278b609e3e912c6335f184fbb309e59c278560ae3c90ae36915c6532b8c67a7309e16613ccb84f1ec17c6b34e18cf02613c4dc278ea85f1e484f1d409e3592f8c6797309eedc278ba85f12c14c6d3218c67b6309e55c278a609e36910c6b34518cf24613c8b84f1cc11c6335d184fa3309ec9c278c6e37943e5f06404f06483739f499685f70f80afcafbacedafda9a86dfbfcaf9abe03357bb7275c4b6af021ffd36fcea88cfa24e57415bfa5c39fff49650278cd507eb14af1e38ae16c2734018cf64613c8dc278a60be399238c6791309e49c278b608e36910c6334d18cf2a613cb385f17408e359288ca75b18cf76613cbb84f1ac17c653278c27278ca75e184f93309e05c278d609e3d92f8c6799309e16613c3b85f1d40ae36915c69315c6b35218cf2c613cedc278e60be3e912c6b34d184f8f309ea5c2787a85f1ec11c6b34f18cf6a613c9b85f1d408e3992a8c67a6309e79c2785608e359228c67af309ebc309e4dc278aa85f12c17c6334518cf56613c3384f11484f1cc15c6d3298c67b1309e35c2787608e3d92d8c6783309eaa081e86ff7f19f2d0fd6bb46d5a3f202436c37e08ffefe7354c6dbad66dabd66d97f8295e0dd4b9ce5d18d8fb51f0b3c4e5df6f88f7ce5d0b1a5dcbd416da1f196fff30c72ee07d950130049e3e41040fc7fda84ced1c918709feffd9bcd5ea3a4f2b7fdfe5a0ce35a0df750cfa45e5f69f8e01f79a4666cb43e70e62cd42bd0d4218c977252f4f78dc6e08462ea58edbeb8087a30f636a67787c5defb5694384ee540773f57a8676461d3bb47e3dec87b4315b9e4dae4cac59a8b7490823f9aee5e5098faf4dc1c8a5d4f1753df070f43f4ced0c8faf1bbc366d8ad09dea60aedec0d0cea86387d66f80fd903666cbb3d99589350bf5360b6124df75bc3c1d5968332da58eaf1b8087a3ff616a67787cdde8b5697384ee540773f5468676461d3bb47e23ec076556e62866cb43bf3121d62cd4db2284917cd7b3f274e4b3d0665a4af56337020f473fcfa47bd88fdde4b5694b84ee540773f5268676461d3bb47e5344ece620592d6e1e85163747f0dc3cce5a50bc7299af4921b3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaab35d5467d55975569d9360569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e6396a0b3e5a167c4106b16ea6d15c248be1b7879c2df056d0d462e196fbd0fca3703cf8d0cfa30b533bc87fca0d7a6ad11ba531d3cbe0e32b433ead8a1f583b01f0e96c17c530a9955e7b1315b1e7a562cb166a1de36218ce4bb919727ecc7b605239752fdd841e0e1e8e799da19f663fd5e9bb645e84e75f0f8ea676867d4b143eb144f9995398ed9f2d0ffb021d62cd4db2e84917c37b3f214c2df376e0f462ea5fab17ee03998384fb11f63d03decc70e796dda1ea13bd5c15c3dc4d0cea86387d60fc17e2887f9a61432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393a5b1efadf21c49a857a3b843092ef202b4f7b38efb02318b964bcf53e281f029efec4798af30e0cba87f30e87bd36ed88d09deae0f17598a19d51c70ead1f86fd30d1996f4a21b3e6c6f8306b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7314bc80dcbb3d39589350bf5760a61245f3f2f4ff8dc839dc1c8a5d47d3b8781e710833e4ced0cefdb39e2b5696784ee54078faf230ced8c3a7668fd08ec076556e62866cbb3cb9589350bf576096124df215e9eb01fdb158c5c4af563478087a39f676a67d88f0d786dda15a13bd5c15c1d606867d4b143eb03b01f945999a3982dcf6e5726d62cd4db2d84917c877979c27e6c77307229d58f0d000f473fcfd4ceb01f3beab5697784ee540773f528433ba38e1d5a3f0afb419995398ad9f2ec716562cd42bd3d4218c9778497a7908536d352aa1f3b0a3c1cfd3c533bc37eec16af4d7b2274a73a98abb730b433ead8a1f55b603fa48dd9f2ec756562cd42bdbd4218c937c0cb131e5f7b83914ba9e3eb16e0e1e87f98da191e5fc7bc36ed8dd09dea60ae1e636867d4b143ebc7603fa48dd9f2ec736562cd42bd7d4218c9779497273cbef605239752c7d731e0e1e87f98da191e5fc7bd36ed8bd09dea60ae1e676867d4b143ebc7613fa48dd9f2ec776562cd42bdfd4218c987e78bfd4c3c398f2717a1c5448cdde0c56ea890d88d5eecc60a89ad79ae795e09b135cf35cf2b21b6e6b9e67925c4aed45c53cd2b53f3cc79d43c731e35cfa8e62235ff6372b13bb15fa98258c798da894b1f94717c8e9635c278160be3e914c63357184f4118cf0c613c5384f12c17c6532d8c272f8c6789309e15c278e609e399298c67aa309e1a613cab85f1f40ae3592a8ca747184f97309ef9c278da85f1cc12c6b352184f56184fab309e5a613c2dc2789609e359278c6781309e26613cf5c27872c2780e08e3a913c6b35e184fb7309e85c2783a84f1cc16c6b34a18cf34613c0dc2782609e359248c678e309ee9c2781a85f14c16c69311c0930dcefd3d0afe9ea01a7c747fff7ef03dcb950f80af2a22066de738f868fc94b661fb9b754de73254c1676e8de07a56443c8a736bc467c743778cd507eb14af1e386e15c23359184fa3309ee9c278e608e359248c6792309e06613cd384f1ac12c6335b184f87309e85c278ba85f1ac17c653278ce780309e9c309e7a613c4dc2781608e359278c6799309e16613cb5c2785a85f16485f1ac14c6334b184fbb309ef9c278ba84f1f408e3592a8ca75718cf6a613c35c278a60ae399298c679e309e15c2789608e3c90be3a916c6b35c18cf14613c3384f11484f1cc15c6d3298c67b1309e35c278aa22780e30f1c43d4fe18080d8763d0fbad8250bef8fc7ef000f788cb47e0c18919778f24c3c71cfa0c80b886ddb4fdf25680e2e0befe3efb8b8722aef31d27a544ee17d69ab9978e29edbb15a406cab058d5dd23d0059781f7fb7c09553ab3d465a8fcaa9465e9ef07f4bb404239752f71ae131c7b10f99da99c7e32fc16768443e8bbac5d30a9fa13a1ef7c9c7f507144f9995398ed9f2d0dc05b1e2f96c3c7ef7361ac6a8f32b034fd83fb606239752fde331e0e1387f30b533ecc74e786d6a8dd09dea60ae9e606867d4b143eb2722623707c96a7172145a9c8ce03939ce5a50bc72990fa4905982ce9667952b136b16eaad12c248be3c2f4fd83fae0a462ea5fac793c0c371fe606a67d8279cf2dab42a4277aa83c7d7298676461d3bb47e0af64339cc2752c8ac3a8f8dd9f2d01832b166a15e410823f98eb1f214f25968332da5fab153c0c3d1cf33e91ef663835e9b0a11ba531d3cbe0619da1975ecd0fa20ec076556666556666556666556666556666556666556666556666556666556666596cd6c79e8b78dc49a857aed4218c9779295a738efd01e8c5c4acd3b0c020fc7bc0c93eee1bcc369af4ded11ba531dccd5d30ced8c3a7668fd34ec076556666556666556666556666556666556666556666556666556666556666596cd6c79e899dbc49a857a1d4218c9778a9727fcdd564730722935ef701a7838e66598da19ce3bdce6b5a9234277aa83b97a1b433ba38e1d5abf0df683322b7314b3e5a1675b116b16ea750a6124df202b4f71feb43318b994eac76e031e8e7e9e49f7b01f3be3b5a9334277aa83b97a86a19d51c70ead9f81fd500ef3891432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393a5b1efa9f6bc49a857a5d4218c9779a95a73d9c77e80a462ea5e61dce000fc7bc0c93eee1bcc359af4d5d11ba531d3cbece32b433ead8a1f5b3b01f263af38914326b6e8c0fb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb384dcb03cddae4cac59a8d72d84917cb7f1f284cf3de80e462ea5eedb390b3c6718f4616a6778dfce90d7a6ee08dda90e1e5f430ced8c3a76687d08f683322b7314b3e559e3cac49a857a6b843092ef0c2f4f210b6da6a5543f36043c1cfd3c533bc37eec76af4d6b2274a73a98abb733b433ead8a1f5db613fa48dd9f2f4b832b166a15e8f1046f2e179b9878927e7f1e422b4385fb1ed7aaf2bd7bbd72cbcdf0b8c5cfd618fc748eb98e3c84b3cbd4c3c0d1e4f438416e72bb66dff3a579ee65eb3f0fe3a60e4caa95e8f91d6a372aa0178d631f1347a3c8d115a9cafd8568bf5ae3cddbd66e1fdf5c0c89553eb3c465a8fcaa946e059cfc413d727ad1f87d871c7d778c48ecb95f188ad9aabe6aab96acea979e63c6a9e398f9a675473519a335c4785e3bd142300065cfaa08cdf1538ae3d99da998ffa3eb6de6b137e1fc33187f3f57d439995398e9969dca223ebc5267d028f879621662dc673dcb4d76b531ac64d4b319f4821b3ea3c36661bfb8ee4637764bdd8a44fe0f1d07207b3164ced0cfb833b83688d295e0eea609edec9d0ce0cc4a56dd3fa9db01fca613e914266d5796ccc36f65d89c72e3e4f1e63933e81c743cb5dcc5af0b4b3d81fdc1d446b4cf1725007f3f46e867666202e6d9bd6ef86fda0cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccb2996dec67271ebb387e8fb1499fc0e3a1e5d9cc5af0b4b3387e7f4f10ad31c5cb411ddce7f730b433037169dbb47e0fec076556666556666556666556666556666556666556666556666556666556666596cd6c633f27f9d8e1ef713036e913783cb43c87590ba67686e3f7f706d11a53bc1cd4c17d7e2f433b331097b64debf7c27e5066658e62b6b19f9b78ece27c1ec6267d028f8796e7326bc1d3ce627f705f10ad31c5cb411ddce7f731b433037169dbb47e1fec8772984fa4905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7cad1d9c6be3ff1d8ede1f83dc6267d028f8796fb99b5e0696771fcfe81205a638a97833a98a70f30b433037169dbb44ef12a81f9440a993537c68759734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59426ed8d8cf4b3e76f87b768c4dfa041e0f2dcf63d682a99de1fd2f0f06d11a53bc1cd4c13c7d90a19d19884bdba6f507613f28b3324731dbd80f251fbb90f562933e81c743cb43cc5a30b533ec0f1e0ea235a67839a883fbfc61867666202e6d9bd61f86fd903666dc7f99e46287f76d528c2af76a7dcf77e56af0bdc0956bc0f74257ae05df8b5cb90e7c2f76e549e07b09b48d7c2f75e595e07b992baf07dfcb5d791df85ee1cabde07ba52bf780ef55ae3c04be57bbf2ede07b8d2bdf01bed7baf29de07b9d2bdf05bed7bbf2dde07b832b3f1b7c6f74e57bc0f726577e0ef8deeccaf782ef2daefc5cf0bdd595ef03dfdb5cf97ef0bddd951f00df3b5c7929f81e89f0bdd3959f07be77b9f283e07bb72b1f00df7b5c790af8deebca53c1f71750a6d7f7b9723df81e75e51cf8deefcad3c0f701576e00df075d793af83ee4ca8de0fbb02bcf00df475c7926f83eeacab3c0f731576e02dfc75d7936f83ee1ca73c0f749579e0bbe4fb9f23cf07dda95e783ef33aebc007c9f75e585e0fb9c2b2f02dfe75d7931f8bee0ca4bc0f74557c6fdfb97aefc10f8a85f79187cd4af3c1f7cd4afbc007cd4afbc107cd4afbc087cd4afbc187cd4afbc047c94772f051fe5ddcbc04779f772f051debd027c9477af041fe5ddabc04779f76af051debd067c9477af051fe5ddebc04779f77af051debd017c94776f041fe5dd9bc04779f766f051debd057c94776f051fe5dddbc04779f776f051debd037c94778f808ff2ee9de0a3bc7b17f89a5df9dde0bbc095df03be0b5df9bde0bbc895b19fb9d895df07be4b5cf951f0515ff87ef03dc3953f00be65aefc41f02d77e50f816f852b7f187c2b5df923e05be5ca1f055f8b2b7f0c7cadaefc71f0ad76e54f802fefca9f045f9b2b7f0a7c0557fe34f8da5df933e0eb70e5cf82afd3953f07be2e57fe3cf8ba5df90be05be3ca5f041f9dc7a99fb1c7b33d2e4907d2c8faa8cdad116d21df64684b5f90ec351dc5a26dd37a3b30d23e288c3f6361b48c6d1ea3e5e964d00cf38a9652df993a81a7838187a99de177a62eaf4ded5e9b7250e719d0ce2e867666202e6d9bd6bb2036c73e472d6add7697795ad4601d7742b3e7d3523ad2366cfe1622dad2c3dc16da36f54b3de310bbdb8b9df762637f4c4ba9e3ab1b98d73030dbedf626bfddf0f85aebb645394571f2d0a675a041526dc2d819671487fc35509edf345c97ea911e74fe22769bcbb42f91ddff5ca7f7b91cd4e989687f5f906cfb7b3d9e5e8fd9ee9386a6610e86e321cc811e8f83d6f3a05d6f8c763da01dd5c1f35f0b93766b3c1e5a6f011ebac6e9021f5d2b103f5e67b58e03b7dfef75457093af1b185b22180bc93386d73a2d1e23ad1780917c6b80a79b49337f5f2ff3f4c1f3729d57873e5b037556c3b9311b51d71e774b33c3eda2efe07f0c92edd3eb18f4c2f18100f4093c0d03d08bda59cbc03335181e23383b3478a6ff9681cb07fa8f6400adc6c3c4d74c4433aac087e5ea085f108c1c0ac121591a0ac121d92a4f161c82a1faf6ab946d160d370c9c3c3ef4cc5303a70e9fb9fbf4d0c091bd83b72075ad478fa4712d4052f4d13239181eb4e90b929d8ca9f362954a9ec9f03a09dea73af9a7b7b431b5333ce94df1da54e7b52907756ae1bd290cedcc405cda36ad4f89889d6047146a3175145a4c8de0993ace5ae0c037f9f048a5f771f2a4ca6b0b1ed1d8263fcf136d10055c0adbcf3838fb9e3dd86b5d632605c33b9b7a4f7b456b77821d31b5672d3b226a47406d17644738ed88a63da9d9114b3b42694724ed08a41d71b4238c7644d18e20da11433b42d81c144700ed889f1de1b3237a9700db5781d77eabb667483b226747e0ec889bbdb2b25700f66ac45e7ddb2b453bfa61af10ec374b3bca60cfb6f64ac69ea5ed99d55e29da2b447b456faf70ed2cd506631b9dd69b8c6d36b6c5d85663db8c6d37b6c3d84e63bb8ced36b6c7d85e63fb8ced3776a9b1cb82e2e8fae5c6ae3076a5b1671abbcad8d5c6ae3176adb1eb8c5d6fec0663371abbc9d8cdc60e1aeb3776c8d86163478c0d183b6aec1663c78c1d37f62c63b706c53b744e1a3b656cd0d86963b7193b63ec6c509c31b333647646ccce80d9192f3bc36567b4ec0c969db1b233547646cace40dd1f146798ec4c919d19b2b3027616c08efadb51fe1706c5517c3b6aff92a0382a6f47e1eda8bb1d65b7a3ea7614dd8e9adb51723b2a6e47c1eda8b71de5b6a3da7614db8e5adb516a3b2a6d47a1eda8b31d657e24288e22db51633b4a6c4785ed28b01df5b5a3bc8f06c5515c3b6a6b4769eda8ac1d85b5a3ae7694d58eaada51543b6a6a4749eda8a81d05b5a39e7694d38e6ada514c3b6a694729eda8e4978c3d66ecaf8cfdb5b1bf31f6b7c6feced8df1bfbb2b1af18fb0763ff68ec9f82625efeb3b17f31f63563ff6aecdf8c7dddd8bf1bfb86b16f1afb0f63df32f6b8b16f1bfb8eb1ef1afb9eb1ef1bfb81b11f1afb91b1ff34f663633f31f653633f33f67363bf30f64b63bf32f66b634f187bd2d86f8cfdd6d8ef8cfdded853c1f0ec0676227f702b34d2de3f343470f2f450f3d060f3c9db4f0c1d3f7de2eee63b8f0f1d6b1ebc63e0ccd1138377e287dfe7ba2d9a46d874e64cffddcdc74f1d19b8ab79f0f6a1e6c1a3cd87066f3f75e42c7ee8cbee430bcf8dd87fe4487cb06f553d0dd2ef8e31e82fdde768826657e9b63d3116419e1acb8766568fad4197bab30e7d7bbfa278b5db7cf6c4e05073bef994f9db7fc27c66e0486b33be77d6887c76a8f9ec50ff99a1e6a367064f36b7b5e276af9d328646d4348de143ad4da36f79f0ffd2fd24f2250a0400", "isInternal": false } ], - "packedBytecode": "0x000000028df71de500000047d11f8b08000000000000ffed9d779815c5baee7b6008b26644ccd9c1848ae2b0c8cc008339614611116118465060886246dd067230672428390b2828490c3be7e40eea76bbd33967effddc3fce3de706efed5aabbe3def94d58b5963d7e25db3aa9fa766557f53dddfafdefeba3a5577fd330882a2203db50cd3e9c1d727f97f95fe2dff6653d718d755ee92b3284f385be40967cb3ce12cce13ce5679c2d93a4f38dbe40967db3ce13c24464ec5d6226838c5cddbce81ae713326f24cd3923cd0b434cf343d340f346d1fe4471b75589e7076c813cec3f384f3883ce13c324f388fca13cea3f384f3983ce13c364f388fcb13cee3f384f3843ce13c314f384fca13ce93f384f3943ce12ccb13ce8e79c2796a9e709e96279ca7e709e71979c279668c9c9d81b393fe3d4bff9ead7fcfd1bf52f65cfd7b9efeeda2eb58ace7cf575c61520f6992c6ffba85a97b987a84a9a7f1bf5e61ea1da63e61eaabff57a6ff5711a6ca30f50b53ff300dd01a0c0cd30561ba304c1785e9e2305d12a64bc37459982e0fd31561ba324c5785695098ae0ed33561ba364cd785e9fa30dd10a61bc334384c3785e9e6300d09d32d611a6ab0dc1aa66161ba2d4cc3c3747b984684696498aac3342a4c35611a1da6da30dd11a631611a1ba63bc3745798c685697c982684a92e4c13c334294c93c334254c53c3342d4c7787697a98ee09d3bd61bacfd0ecfe303d10a607c3f490c139234c0f87e991303d1aa66f85e9b1303d1ea627c2f4649866866956986687694e98e686695e98e68769419816866951989e0ad3d3617a264ccf86e9b9303d1fa617c2f462985e0ad3cb617a254caf86e935cd223bc2e230bd1ea625615a1aa665615a1ea637c2f4669856846965985685697598d684696d98d685697d9836846963983685697398b684e9ad306d0dd3b6306d0fd3db617a274c3bc2b4334cef86e9bd30ed0ad3ee30ed09d3de30ed0bd3fb61da1fa60fc2f461983e0ad3c761fa7698be13a6ef86e97b61fa7e987e6068fec330fd284c3f0ed34fb4eda7faf767baacdcbffb79987ea1f3bfd4bfbfd2bfbfd6bf9f18cbfc264cbf356cbf0bd3ef0ddba761fa4ce73fd7bf7fd0bf5fe8df3feadf2ff5ef9ff4ef9ff5ef5ff4ef5ff5efdff4efbfe9df7fd7bfffa17fffae7fffa17fff19a62d1dd3f9b641fd5415c4d44675af4d3dfb11f13b050d27a5454bfd3ff92dd3f6623d2fbfa25d2b3ddfcab0b7d6f3ad8df5b4d5f36d0d7b073ddfc1b01fa1e78f30ec47e9f9a30cfb317afe18c37eba9e3f1dec8900ee0d6bbbb2b5d4a622b049bcb6005b2b6d6b09b6d6b23ab0b5d1b6566093eddb1a6c87685b1bb0b5d3b6b6604b68db21a265984ab4ad2a882b56ca47aaf596c6bd5efdbcecd0f87947a9f5b677c47b58fcbca3d57a3b38e055f171b85ed761103747685b07b01da96d8783ed286d3b026c476bdb91603b46db8e02dbb1da7634d88ed3b663c076bcb61d0bb613b4ed38b09da86dc783ed246d3b016c276bdb89603b45db4e025b99b69d0c36dde406a780ed546d2b03db69dad6116ca76bdba9603b43db4e03db99da763ad8a4fd3d036c72be78a6b6a9b6e390225846dba5dd4a2d236d36d8ce96f61a6ce7485b0db6ced24e83ed5cf02db6f3a0ad115b176d93764bfdafafce570571ed27c95ab5de8ab8d71bae59adb75ffceb4d3d73ec1fd4eb5a057e2a40ab013a1f63bfa6aee8bb4827f123f662c85f0165a59ce821c71e6157c7984a9d1f9061b9bec672a550a6d252ffaa20defaf73378fa19ccad20ef2666bb75f331dbe829eb981d0265cdd893f3a0e618b38380c341ccf6f231dbe829eb98ad85b266ecc9b970738cd95b81c341cc56bb89d964b98fd9f47db320b0c79e5c0f35c7981d0b1cf1c76c0f1fb38d9fb28ed947a1ac197b724ddc1c63763a70c41fb3bdaafdb941a3a7ac6376219435634feecf34c7987d1c381cc46cad6f671b3d651db3af415933f6e45e61738cd9a78123fe98ede32866bbf9980dd2cf4083c01e7b72dfba39c6ec12e0883f6647f9fbb38d9fb28ed91d50d68c3d7986d21c637683ceabe70c3fd5cf194e04dbcfb4ed24e08d3fb66b7a388aeda48fed74df9020b0c7a83ccf6b8eb1bd5be7551cff12fa2388ed57dad6116cbfd6b653c1f689b69d06f572b00f54fb7da0d153d6fbc06fa1ac19cbf26cb939ee033f060e07315be363b6d153d631fb37286bc69ef473688e31fb29703888d95a1fb38d9eb28ed9ff82b266ec9da5f3cd3166a5afa93a5ff85c9f2f9c03b63f685b67b07da16de782ed8fda761ed8bed4b62e60fb93b69d0fb63f6b5b39d8fea26d5dc1f6576d4b82ed6fdad60d6cffa66dddc1f6efdad6036cffa16d3dc1f6776deb05b67f685b6fb0fd53dbfa689b7ade257dafe4bcb52df05705f16e5be97729eb96f9ae39f0dddef0dd3e87be3b18be3b587c271df84e800f998a8cf92ac827ddf29497020ffaea1ebfaf6eaaeedd82c6d7bd3bf0f47050f704f8680c4f0fe0e9193f4faaff6faff8d79bdac6dd0c4d13e0ab1bd4abb7837a15812f59b7cc8bbf52b061dbdadbc2d8277ec66411f89275cb7c1f60141bb6f5f2ce95ec3fea78d8a9a89ed7c1be943a27427f55c021fe8aa1cce51debcb76d66c25f07f3ceef5346c8ee2321517e24bd62df3e2af04ead333f78cc9c632f630185db51145e04bd6ed7dd76f07c9e371dcc1b58eb54d13df1539f0ddc7f0ddddf08d6da74c998e6d7d8039f66b4e7d6cab8c7fbde5787d22d786e207cf1ff01a2eae3aa16fb936143f622f86fcd545f565a59ce821edb0b0ab58966d89ece672bd8de54aa14c85a5fe5541bcf5af34782a0d6675bcb9108e850ef687540c54181c32df1db4ab8cd0ae02b49332678176aedab3be068fccf7041e69c77a018fab6ba2289e5c5c8f1dc8379ec3e2f5b3fc1fcf035c6dafae06a3ccdbb6571f60b49dab38b89ec978aed20318c5d61778ba39d22c6abb7623f1ed205652ed91f8907373d97fc55f3194e9d3b2beec9dd056ba88118c47991a7bcd1bff764aa6aec17b64c183dbcec175555747f1588ef76fbe0ae28d35b35dea616815758fc7555bdecde09179f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f199f2761bf2d29d79384d1ecffe6ea3e7feafb877a5df80ce87f3bed0f962cc7fe31d20fe21ca3cec550a6b4453ddbff83fe60e6732aec23d9d3ad76a96d89fd31ab605efc615f2bdc960cfd9dca62f39d1ce5ea799bfa0698fa8ea6d9f7b3a7455317fd9f51d3224353ec8f7faec1a3e2b4b2653d9b8b677fd93e8b44ad241fe7b3bdd2c01eebf16f97648367d62d8286ed071e675cf5df91b65a9e975718be8ba1cc092deab70df6b3aa823ac872d8ef47d62dcb9c03cb561aeb6eaf97158ed6c6fa7bc1b252e6646853f7b6a8d7cc415b99ccb6ef3a3e378fff389c7e8edf2d0b9eaec0e3a29d7174be518efb40dccff1cdfe69b6f31829837dfb1cf4abccd8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb63b09638efa3ea49e67c8b7caf0d9d48616f57e5d3f8793674e9d8d3ae3bba3ff6c51cfb645e74b82aff77788da96aebe4f11b52dc51f7e7b069f05b978ae5b04be64dd498b16922f8bcd77fa39be8bb121e4397e3743d7ee164d5dedaff88c1535c5fdb587c183cf46a3beed93346c2efb0e45c585f8c37d290936c9e3fbd12eb6331e4bcc7e3de20f9f5f7f576bdb3e70b5ed93e52edb0d79362fcfeabb59ea2a657e046ddf4f741efb7060df91cf2dff9729d3736ad14fd5d9c1f735cb8b605db27d6ddff61c08ac31f9ee8aeb2ad269a0a14131e43f6b515f56ca4959d15ad8d53e22df80417673b91ec672a550a6bfa5fe5541bcf537bfb53ac06056b1f37388b3cfe1f8efaa4dea1fa1d139a0919471fccd466bff4ab35f21b6a36d8c32b22c7e8beeafd04645f51fb51d035c1fc764ddb6e398795c684c3fcf42efa7f5dfd05ec4dd4febbf2186b09f5660acbf33ac5fb8da04d1c71629f37f8df59be7e4b20cf603fbd77e02df7349ea7c36e7e407ebfaca764e8ecb45d55d31e377d0aa6264c69840168c2729d34e6b2ddbac3282bb8f65d9d28865452bf35b6125c1d7f573f39db5f43e3fc0a88bc4357e835cca1c01757173de923e0774f54d395997b403494b5da5ccb1b0af1daff309d84ed8369f6df9bf4c99ce01710cf70be2af736afb5ea8d725dbf7028bef8b803526df5dd1b79c038a1fb11743feac96f565a59ce8215a0bbbda47e43c0ad9cde52a8ce54aa1cc404bfdab8278eb7f81c17381c1ac62e72488b3b3a11fbaabb67a6084469d41232983f7146ddf01b5ddeb70f5fe46d4b914bebf649e5fe171d2cd7993fd3cd6bcaf663b47e86cf0e339422f68671396b2e6fd42395ec6d96f18df95e8057ef15d0957df6eee0bba55c13c9e171c4cdf2ebe63abfc458d99d03707bea3c64cc885ef0e86ef0e39f4ed35f79a3369ee600c82d4fb67f8cd5235653a2fc5710964b916c0e8622c8744d0f0dbe30762c4f11d64b996c0e8e2f890edb7cf7b01a32c570c8c2ede2dc5f1371ac388df18c6e3bc303af8566cd7a67e2b16efe9b50646a67736f1d9541b6074715edcd477f5f07cbe2dfcba1a97a85b168c496094e50e014617f7c6f15aa6318c785d24cbb5034617cfb0b21ddf09bf3d8ff7965d32663ab63bee8b92ccf6de4ba55b9e8ce71ae8dbc1b886292df03ee381b4e8e79627e3b90ffa7670df2fa5058e3378202df0d9a08b710f1341c3e77007e2c1e797b2dce1c058e5887140168c55c0f8af7bc5c038d0116355168c038151ec4702a383fbaf29c6815930e27d4a59ee2860bcd011e30559305e088cb2dcd1c0e8e25e6a02fc3686f1226094e58e01c68b1d315e9405e3c5c028cb1d0b8c973862bc380bc64b8051963b0e182f75c47849168c9702a32c773c305ee688f1d22c182f034659ee0460bcdc11e36559305e0e8cb2dc89c0788523c6cbb360bc021865b99380f14a478c5764c1782530ca722703e3558e18afcc82f12a6094e54e01c6418e18afca82711030ca7265c078b523c64159305e0d8cb25c4760bcc611e3d559305e038cb2dca9c078ad23c66bb260bc161865b9d380f13a478cd766c1781d30ca72a703e3f58e18afcb82f17a6094e5ce00c61b1c315e9f05e30dc028cb9d098c373a62bc210bc61b81f1060be360478c3766c138181865b97381f1a6f81953d7d283b360bc09786e8e9f27a5d94d59f0dcec9627f55dbd9b2cbe6e89df576a5b0c091a5ff75b806768fc3ca96d714b163cc2500acba166b7c6cf98d26c68168cb702cfb0f879529add9a05cf30d0ec568b66b7c5cf98d26c58168cb701cff0f879529add9605cf70d0ec368b66b7c7cf98d26c78168cb703cf88f879529add9e05cf88a05eb3db2d9a8d8c9f31a5d9882c1847024f75fc3c29cd4666c1530d9a8db468362a7ec69466d559308e029e9af879529a8dca82a706341b65d16c74fc8c29cd6ab2601c0d3cb5f1f3a4341b9d054f2d6836daa2d91df133a634abcd82f10ee019133f4f4ab33bb2e019039add61d16c6cfc8c29cdc664c1381678ee8c9f27a5d9d82c78ee04cdc65a34bbcb11e39d5930de65e189fb3bd9775a7c8d7754f77141e3eb2e0ca5b01cf69398e088717c168c13805196c37e12758e182764c158078cb25cc23163a67e1275e07b62fcbe53ed525dd0787d26bae5c9d84f027d4f72a4c5c4a0f15a4c72cb93b19f04fa9eec488b4941e3b5980c3c531c6891001f8de1118652580efb494c75c438250bc6a9c028cb613f89698e18a766c1380d186539ec2771b723c6695930de0d8cb21cf69398ee88f1ee2c18a703a32c87fd24ee71c4383d0bc67b805196c37e12f73a62bc270bc67b815196c37e12f73962bc370bc6fb805196c37e12f73b62bc2f0bc6fb815196c37e120f3862bc3f0bc607805196c37e120f3a627c200bc607815196c37e120f39627c300bc687805196c37e12331c313e9405e30c6094e5b09fc4c38e186764c1f83030ca72d84fe211478c0f67c1f80830ca72773966cc74fdf24833f71d75add2dc7d475d973477df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f771cee4fb5107be13e043a62263be0af2c2500acbdde5199b3523f294c5c7538e75475fdf22a8fbb72c3c458eea8ebe1e23a8bb30e41be3a379c088fbb8d7b1e98c8e754c369551f13cee88e7b12c781e079e271cf13c9e05cf13c0f364fc3ca9987a220b1e612885e5eeca03c647f380d1ebe8756462f43a168e8e9ed1337a46cf783018f3a10df78c79118fc9a6322a9e99f1f3a4347b320b9e99a0992c77b35bc664531915cfacf879529acdcc8267166836d3a29903c664531915cfecf879529acdca8267366836cba29903c664531915cf9cf879529acdce82670e6836dba29903c664531915cfdcf879529acdc982672e6836c7a29903c664531915cfbcf879529acdcd82671e6836d7a29903c664531915cffcf879529acdcb82673e6836cfa29903c664531915cf82f879529acdcf8267016836dfa29903c664531915cfc2f879529a2dc882672168b6c0a2192be35d79c0f8681e303ad631d95446c5b3c811cfc22c781601cf538e781665c1f314f03c1d3f4f2aa69eca8247184a61b9bbf280f1d13c60f43a7a1d9918bd8e85a3a367f48c9e313bc66fe501a3dfd69e9195d1c1f555c677689e6ae6bea3dea169eebea3dea169eebe7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee39cc9f733f1fb4e66fb8d996780c7c5376f1cd5b35cadf759bdaeaf62d44f69f59ca1d5538656a550e659d0ef3907fa15815f59b7cc8bbf6c993b11303bf29d3c345cc721507ff1f1a8a187f2ffbca3ba47b5f5cf3773df516d7d73f71dd5d63777df3ece7d9c17826f1fe73ece0bc1b78f731fe72cbe31df2aa83f6f97ef9faa75bc00ff2f82f2f25de1622833a54dfab77de0f72117befd3ee48f1585e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe77c718ef15099039ec0e00932f02c24e39946c633878c670c19cf30329e6bc8782e24e379808ca73b19cf44329e51643c3791f15c41c6733e194f7f329ee9643c7dc878e692f1dc49c6f30419cf70329eebc8782e26e379888c2749c633998c673419cf2d643c5791f15491f1dc4bc6d38b8ce76c329ef1643cf3c878ce22e31941c6f32419cf0d643c8792f1b427e3b9948ce731329ef3c8782ac8781e26e35940c633958ce70e329e5bc978cac978ae26e3e942c6730119cffd643c3dc878e693f1d491f1cc24e3a926e3194cc6730e19cfe5643c2dc978fa91f12c22e3b99b8ca72f19cf58329ece643cb791f15c4bc6731119cf83643cddc8782691f1cc22e3a921e31942c6732519cf00329e7bc8787a93f18c23e3e944c6733b19cff5643cb9f89e69363c25643ca5643c9790f13c42c633838ca72b19cf14329ed9643cb5643c43c9780691f10c24e3b98f8ca72719cf04329e91643c3792f13c4ec67318194f07329ecbc8788a087812c1d7c73049c0ff9f015b0b6359f5d9d7b91debffffa2b6b780655ed2f9969675bf0836f996ec4b966551a717a12e553a5ffecda6944ee8ab0ae6c55f0970bc44c27319194f07329ec3c8781e27e3b9918c672419cf04329e9e643cf791f10c24e31944c633948ca7968c673619cf14329eae643c33c8781e21e3b9848ca7948ca7848ce719329eebc9786e27e3e944c6338e8ca73719cf3d643c03c878ae24e31942c65343c6338b8c6712194f37329e07c9782e22e3b9968ce736329ece643c63c978fa92f1dc4dc6b3888ca71f194f4b329ecbc978ce21e3194cc6534dc633938ca78e8c673e194f0f329efbc9782e20e3e942c67335194f3919cfad643c7790f14c25e35940c6f330194f0519cf79643c8f91f15c4ac6d39e8ce750329e1bc8789e24e31941c6731619cf3c329ef1643c6793f1f422e3b9978ca78a8ce72a329e5bc8784693f14c26e34992f13c44c6733119cf75643cc3c9789e20e3b9938c672e194f1f329ee9643cfdc978ce27e3b9828ce726329e51643c13c978ba93f13c40c6732119cf35643cc3c878c690f1cc21e39946c6b3908ca7d2c2f38c231e79df5dd62df3cf90f876b01dcad57a5f7654a757f4ba5aebf50abff82b863233daa57fd5f30f5c56b8ccef13e0bb39af8046af38aa8b6c8f2263fba0ef171cf936c7e793f9179ab9eff686eff605e2bb83e1bb4381f8f671eee3bc107cfb38f7715e08be7d9cfb3867f2ede0da2089df4993a9c898af823c5e2fb8f8be9ca37a36b84efc2a46fd9456af1a5a99d756a550e665d0ef5507fad9ae3d655efc65cbdc898019e3a22c88372e5e8bbf4e49d5eff010d0f535435facd762479a461d43163773df51c790e6ee3bea18d2dc7dfb38f7715e08be7d9cfb382f04df3ece7d9c33f97e5de763bc6e2c471fad82faeb81d7c1ef529d2f8ad1af5ad712f05b041ce2af18cafc2f78aee9f779bfcfc7e5db1fdb7c9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8668e73332ffdc5cf023657fdf9a3623117ef121c4cdf51b1d8dc7d47c56273f7ede3dcc73993ef650e7c27c0874c99faf82d039e250e781cd533f56c63b951a7678c3a9542193cc62f7750cf22f02beb96f9e5c0235325f0b88883c66c73e45948c6338d8c670e19cf18329e61643cd790f15c48c6f300194f77329e89643ca3c8786e22e3b9828ce77c329efe643cd3c978fa90f1cc25e3b9938ce709329ee1643cd791f15c4cc6f310194f928c673219cf68329e5bc878ae22e3a922e3b9978ca71719cfd9643ce3c978e691f18c20e379928ce706329e43c978da93f15c4ac6f31819cf79643c15643c0f93f12c20e3994ac6730719cfad643ce5643c8bc978ae26e3e942c6730119cffd643c3dc878e693f1d491f1cc24e3a926e3194cc6730e19cfe5643c2dc978fa91f12c22e3b99b8ca72f19cf58329ece643cb791f15c4bc6731119cf83643cddc8782691f1cc22e3a921e31942c6f32a19cf95643c03c878ee21e3e94dc6338e8ca71319cfed643cd793f19490f19492f15c42c6f30819cf0c329eae643c53c8786693f1d492f10c25e31944c633908ce73e329e9e643c13c8784692f1dc48c6f33819cf61643c1dc8782e23e32922e049045f7ff73f01ff7f156cf28efa33607b43e79780ad85c5474b9d5f0eb6629d9775b409d3f31dbfbe6ed4c9d57bf9e8ab0ae6c55f0970bc41c27319194f07329ec3c8781e27e3b9918c672419cf04329e9e643cf791f10c24e31944c633948ca7968c673619cf14329eae643c33c8781e21e3b9848ca7948ca7848ce77a329edbc9783a91f18c23e3e94dc6730f19cf00329e2bc9785e25e31942c65343c6338b8c6712194f37329e07c9782e22e3b9968ce736329ece643c63c978fa92f1dc4dc6b3888ca71f194f4b329ecbc978ce21e3194cc6534dc633938ca78e8c673e194f0f329efbc9782e20e3e942c6733519cf62329e72329e5bc978ee20e3994ac6b3808ce761329e0a329ef3c8781e23e3b9948ca73d19cfa1643c3790f13c49c633828c671e19cf78329eb3c9787a91f1dc4bc65345c6731519cf2d643ca3c9782693f124c9781e22e3b9988ce73a329ee1643c4f90f1dc49c633978ca70f19cf74329efe643ce793f15c41c6731319cf28329e89643cddc9781e20e3b9908ce71a329e61643c63c878e690f14c23e35948c653991b9ea47ab75dfa5a07c0855315e49703cf6207fa38aa67397ed7e0ab18d7abb47ad3d0ea5543ab5228b30cf47bd3817e45e057d62df3e22f1f9915cf233a6ffb0ec423248c625bec9627b5df3e12349c32edb76f028f8b76cd513d53fbd70aa34e8f5874973218ab2b1cd4d3b6efc8fc0ad80ef9c6ac781ed379614d40b9c74818c5b6dc2d4f6aff7a2c683865dabf56008f8bf6c7513d53fbd74aa34e8f5974973218ab2b1dd4d3b6efc8fc4ad80ef9c6ac781ed779614d40b9c74918c5f6a65b9eee09a8b34c99f6af95c0e3a2fd7154cfd4feb5caa8d3e316dda50cc6ea2a07f5b4ed3b32bf0ab68367f6cc3666c523cf76843501e59e206114db0aa73cddcb1350679932b563ab80c7453bef48f7543bb6daa8d31316dda50cc6ea6a07f5b4ed3b32bfdae2bb2c88578b358dd0628d85674d8eb5107fd9322fcb4366afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866069d158f7cbb52581350ee491246b1ad74cb937a2fe8c9a0e15464cc57417e0df0ac72a08fa37aa6fa90af35eaf4a445772983fbd75a07f5b4ed3b32bf16b64336ccabf390d9ebdc3466c53353e7853501e56692308a6d955b9e543b36336838656ac7d6028f8b76de513d53edd83aa34e332dba4b19dcbfd639a8a76ddf91f975b01d3cb367b6312b9e593a2fac0928378b84516c6b9cf22453ef37ce0a1a4e99dab175c0e3a29d77a47baa1d5b6fd4699645772983b1bade413d6dfb8eccaf87ed900df3ea3c64f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce85a3b3e299adf3c29a8072b34918c5b6d6294fb7d47387d941c329d37387f5c0b32e769ef4730707baa79e3b6c30ea34dba2bb94c1fd6b83837adaf61d99df00dba1b933afce43661f1bb961f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e6286686d8503c73745e5813506e0e09a3d8d6b9e5497df7604ed070cad46f6703f0ac77a08fa37aa6faed6c34ea34c7a2bb94c1fd6ba3837adaf61d99df08dbc1337b661bb3e299abf3c29a8072734918c5b6de2d4faa1d9b1b349c32b5631b81c7453befa89ea9766c9351a7b916dda50cc6ea2607f5b4ed3b32bf09b68367f6cc3666c5334fe7853501e5e691308a6d835b9e543b362f6838656ac736018f8b76de513d53edd866a34ef32cba4b198cd5cd0eea69db77647e336c07cfec996dcc8a67bece0b6b02cacd276114db46b73cc904d459a64cedd866e071d1ce3baa67aa1ddb62d469be45772983b1bac5413d6dfb8ecc6f81ed906fcc8a6781ce0b6b02ca2d206114db26b73ca9fd6b41d070cab47f6d011e17ed8fa37aa6f6afb78c3a2db0e82e653056df72504fdbbe23f36fc176c83766c5b350e7853501e51692308a6db35b9ed4feb530683865dabfde021e17ed8fa37aa6f6afad469d165a74973218ab5b1dd4d3b6efc8fc56d80ef9c6ac7816e9bcb026a0dc221246b1e1f16291239e5283a7d4a2c5c1f2ade62b74be44ff26e0ff15c0e8aa3d5c6430ca3cc638f2bad6acbdc1d3ded0ec60fa56f5afd4f943f52f6eaf4a6064d85eed73a0590783a783a1d9c1f4adb4e8a7f387e95fdc5efd8091617b75001e07ed73f784c1a3a64ce71b5b1debe3a89ea9f38d6d815d773c0e49193c766f73504fdbb984cc6f83ede0993db38d59f10cd679614d40b9c1248c62c3eb94edf1f3744f183c6acad48e6d77ac8fa37aa6dab1b703bbeedb41772983b1fab6837a16815f59b7ccbf0ddb211be6d579c8ec756e1ab3e219a2f3c29a8072434818c5b60d78de899fa77bc2e05153a676ec1dc7fa38aa67aa1ddb11d8757f07749732b87fed7050cf22f02beb96f91db01db2615e9d87cc5ee7a6312b9ea13a2fac0928379484516c6f03cfced879d2e301218f9a32b5633b1debe3a69ee976ecddc0aefb4ed05dcae0fef5ae837a16815f59b7ccbf0bdbc1337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d3337b3e219a6f3c29a8072c34818c5b60378de8b9d27fddc0179d494e9b9c37b8ef57153cff473875d815df7f740772983b1bacb413d8bc0afac5be677c176f0cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfcccdac7886ebbcb026a0dc701246b1bd0b3cbbe3e7e99e3078d494e9b9c36ec7fa38aa67eab9c39ec0aefb6ed05dca60acee7150cf22f02beb96f93db01df67866cf6c61563c23745e5813506e0409a3d87601cfded879d2cf4f91474d99dab1bd8ef57153cf743bb62fb0ebbe1774973218abfb1cd4b308fccaba657e1f6c876c9857e721b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec752e1c9d154fb5ce0b6b02ca5593308a6d0ff0bc1f3b4fb7f284c1a3a62263be0af2ef3bd6c74d3dd3cf1df60776dddf07dda50cee5ffb1dd4b308fccaba657e3f6c87e6cebc3a0f997d6ce486d9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a398196243f1d4e8bcb026a05c0d09a3d8f601cf07f1f3744f183c6a2a32e6ab20ff81637d1cd533d56fe7c3c0aefb07a0bb94c1fdeb4307f52c02bfb26e99ff10b68367f6cc3666c553abf3c29a8072b5248c62db0f3c1fc5cf934c183c6acad48e7de4581f47f54cb5631f0776dd3f02dda50cc6eac70eea59047e65dd32ff316c877c63563c63745e5813506e0c09a3d83e041e077197e229357864fe2302df6abe4ee74bf42f6eaf3a6064d85ea539d0acbdc1d3ded0ec60fa56f59fa8f387ea5fdc5e138191617bb5cf81661d0c9e0e866607d3b7d26292ce1fa67f717b4d024686edd521079a1dccf6f060eedb07334ebde6074ff3a283a879d141d4bcc86b4ea5b983e34b128f650130e05405f98f81e73bf1f3a4eecb7d9c05cf7780e7dbf1f3747554cf72b5deef027b5ceb555a7dcfd0ea6343ab5228830cdf73a05f11f89575cbbcf8f3cc9e398a19cf6d853501e53e226114dbb781c745bba1ea7e9e5e97acbf55983e39b2deaf8be72578afb8b55eaf7088bf622833a9ac9eedf79aad04fe2fdb4dd567bf6173f40e7357db733b99177f2541ceeedd66bc978c5ab878de94ed717fbf85e7abf878ca713f475ffb1cd53d9b677ffb2c3c31d6bd6bd473cfbdf1d73dd57e74d1eb92f5ab7df47f1ce954f3eeb8ef49fbd1c5a8733194195456cff69fd07ed8da0ad7fba69c939bfb668ba0be3d13ae326d379f097da5ed52ee03288f6d4e85fec5fdb302eaeaaa5d8cbac784eda2d976bbd4de7c2e69fa2e055d3e20d5ccf69c0275acb470571270633ce6723f9375db9e91551a3ab26986dbfa038b8efd2cdcfd08b819f7eb7e868e6c9a1d68bf1e6ce11e4cc0cdb85f0f367464d3ec40fbf5100bf710026ec6fd7a88a1239b6607daaf875ab887127033eed7430d1dd9343bd07e3dccc23d8c809b71bf1e66e8c8a6d981f6ebe116eee104dc8cfbf570434736cd0eb45f8fb0708f20e066dcaf47040d7564d3ec40fb75b585bb9a809b71bfae367464d3ec40fb758d85bb86809b71bfae317464d3ec40fb75ad85bb96809b71bfae357464d3ec40fbf5180bf718026ec6fdbab1fdf659f7eb3a0b771d0137e37e5d67e8c8a6d981f6eb8916ee8904dc8cfbf544434736cd0eb45f4fb2704f22e066dcaf27193ab26966dbaf1dbd4b98f5bb8d1f3ad5273dc6f48759f0bc0f3c2e62ca511c943beae792ea9bbad7d0ea43432b1cbb631fe8e7a02f4cc66f12883fcfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccfcccf85d467cbe22e53e2061141b3e9372719f5fd5fd7cbd2e597fab300d3abadeefbed8fd26cb5187d67abdc221fe8aa1ccf1a7d4b35da7d94a82af6f371c8b1bb7e59ed8eb90de9666fccbbcf82b81faec051e07efe7a778f6193cfb2c5ae07ba7f1f84e8e72a371b25c7d1fef90a07e3bef31ea839aee8edd7f434d8b0c4d773bf69d081a6e4f61c0a90af2c8e3e2d9b0a37aa6da825d469d4c8d4ba14c27a8e72e07f52c02bfb26e99df053c32b5001e573118183c81451f992ac978a691f18c21e3399d8c671819cfb1643cd790f11c42c6732119cf03643cddc9782692f18c22e339858ce726329e23c878ae20e3399f8ca7988ca73f19cf74329e3e643c7792f19c49c6339c8ce75c329ee3c978ae23e34990f15c4cc6f310194f928c673219cf68329e8e643cb790f11c45c67315194f6b329e2a329e7bc9787a91f19c4dc6339e8ce72c329e11643c2792f1dc40c67328194f7b329e4bc9781e26e3a920e3398f8c672a19cf1d643ca791f1dc4ac6534ec6730c19cfd5643c5dc8782e20e3694bc6733f194f0f329e3a329e6a329e93c9780693f19c43c6733819cfe5643c2dc978fa91f1dc4dc6d3978c672c194f67329e33c8786e23e3398e8ce75a329e76643c1791f1ec25e379908ca71b19cf24329e1a329efd643c65643c43c8788e24e3b9928ca71519cf00329e7bc8787a93f18c23e3e944c6733b19cf09643cd793f19490f19492f15c42c633838ca72b19cf14329e5a329e53c9788692f11c4dc633888ca70d19cf40329efbc8787a92f14c20e31949c6731219cf8d643c8791f17420e3b98c8ca7888027117cfd5b4c09f8ff3eb0c93783de075b0bcbfae439b59457c7c5251dbfbeee169675efb630a04eef415daa74befc9b4d299dd05715cc8bbf12e0d84dc27319194f07329ec3c8786e24e339898c672419cf04329e9e643cf791f10c24e36943c633888ce768329ea1643ca792f1d492f14c21e3e94ac633838ce712329e52329e12329eebc9784e20e3b99d8ca71319cf38329ede643cf790f10c20e36945c6732519cf91643c43c878cac878f693f1d490f14c22e3e946c6f32019cf5e329e8bc878da91f15c4bc6731c19cf6d643c6790f17426e3194bc6d3978ce76e329e7e643c2dc9782e27e3399c8ce71c329ec1643c2793f15493f1d491f1f420e3b99f8ca72d19cf05643c5dc878ae26e339868ca79c8ce756329ed3c878ee20e3994ac6731e194f0519cfc3643c9792f1b427e339948ce706329e13c9784690f19c45c6339e8ce76c329e5e643cf792f15491f1b426e3b98a8ce728329e5bc8783a92f18c26e3994cc69324e379888ce762329e0419cf75643cc793f19c4bc6339c8ce74c329e3bc978fa90f14c27e3e94fc6534cc6733e19cf15643c4790f1dc44c6730a19cf28329e89643cddc9781e20e3b9908ce710329e6bc8788e25e31946c6733a19cf18329e69643c95643c2d0c1efcbf7a376cafcecbb7838ae1ff9375e7f2f67a5d52469e11ab7b15ef1a3655df9d8eeafb6e503f55c1fc4ea8afb0bf0b3cef3ae279cfe0317d9740be1234db61d814e33b8e1877188c32ff0e308a7e3b806787239e9d068fe9bb04f2fd40b3b70d9b62dcee88f16d8351e6b703a3e8f736f0bced88e71d83c7f45d02f9c1a0d936c3a618b73a62dc6630cafc566014fdb601cf36473cdb0d1ed37709e48780666f1936c5b8c511e35b06a3cc6f0146d1ef2de079cb11cf5683c7f45d02f9a1a0d966c3a618373962dc6c30cafc266014fd3603cf66473c5b0c1ed37709e48781661b0d9b62dce08871a3c128f31b8051f4db083c1b1df16c32784cdf25901f0e9aad376c8a719d23c6f506a3ccaf0346d16f3df0ac77c4b3c1e0317d97407e0468b6d6b029c6358e18d71a8c32bf061845bfb5c0b3d611cf3a83c7f45d02f96ad06cb561538cab1c31ae3618657e15308a7eab8167b5239e35068fe9bb04f235a0d94ac3a6185738625c6930cafc0a6014fd5602cf4a473cab0c1ed37709e46b41b3370d9b627cc311e39b06a3ccbf018ca2df9bc0f3a6239e15068fe9bb04f26340b3e5864d312e73c4b8dc6094f965c028fa2d079ee58e78de30784cdf2590af03cd961a36c5b8c411e3528351e69700a3e8b71478963ae25966f098be4b203f11347bddb029c6c58e185f3718657e31308a7eaf03cfeb8e7896183ca6ef12c84f02cd5e336c8af155478caf198c32ff2a308a7eaf01cf6b8e78161b3ca6ef12c8df0036e1ed0bb65774be0fd85ed6f9de607b49e77b81ed459def09b61774be07d89ed7f9ee607b4ee7bb81ed599d4f82ed199def0ab6a775be3fd89ed2f901605ba4f355605ba8f303c1b640e72f00db7c9dbf106cf374fe22b0cdd5f98bc13647e72f01db6c9dbf146cb374fe32b0cdd4f9cbc1f6a4ce5f01b62774fe4ab03daef35781ed319d1f04b66fe9fcd5607b54e7af01db233a7f2dd8eed2f9ebc076b3ce5f0fb60f75fe46b07da4f33781ed639dbf056cdfd6f95bc1f61d9dbf0d6cdfd5f9dbc1f63d9d1f09b6efebfc28b0fd40e74783ed873a7f07d87ea4f363c1f6639dbf136c3fd1f97160fba9ce8f07dbcf747e02d87eaef393c1f60b9d9f02b65feafc54b0fd4ae7a781edd73a7f37d83ed1f9e960fb8dcedf03b6dfeafcbd60fb9dcedf07b6dfebfcfd60fb54e71f00db673aff20d83ed7f987c0f6079d9f01b62f74fe61b0fd51e7a55d53edec9f74be2c88b79dfd32a89fcac0b7f85365feacf36d8c32b26c31943953772854cf38d4b74ca51d967659d9a41d7e056cd20ebf0c3669875f029bb4c32f824ddae117c026edf0f3609376f839b0493bfc2cd8a41d7e066cd20e3f0d3669879f025b95ce2f029bb4c30bc126edf002b0493b3c1f6cd20ecf039bb4c373c126edf01cb0493b3c1b6cd20ecf029bb4c333c126edf093609376f809b0493bfc38d8a41d7e0c6cd20e7f0b6cd20e3f0a3669871f019bb4c377814ddae19bc126fbcb976093b6f943b049dbfc11d8a46dfe186cd2367f1b6cd2367f076cd2367f176cd2367f0f6cd2367f1f6cd236ff006cd236ff106cd236ff086cd236ff186cd236ff046ce375fea76093b6f9676093b6f9e76093b6f9176093b6f9976093b6f9576093b6f9d76093b6f913b049dbfc1bb049dbfc5bb049dbfc3bb049dbfc7bb049dbfc29d8a46dfe0c6cd2367f0e36699bff00b687755edaeab6609367c56a2aff86138ec3d3027c094b55106fdb8f5315e4b1ee325592f1cc25e31943c6f30219cfe9643cc3c8788e25e339848ce735329e89643c8bc8789693f12c23e379958ce714329e8d643c1bc8788e20e379978c672719cff9643cc5643cb3c9789e23e339938c673819cfb9643cc793f124c8781690f12c25e35942c6f332194f47329ef5643cebc8788e22e3d941c6f30e194f6b329e2fc9786692f19c4dc6f30c19cf59643c23c8784e24e339948ca73d194f0519cf79643cf3c8785e27e3594cc6f32219cf69643c6bc978d690f19493f11c43c6f33619cf76329e2e643c6dc9789e20e3a923e3798a8ca79a8ce764329ec1643ce790f11c4ec6d3928ca71f19cfcd643c73c8789e27e3e94cc6730619cf6a329e55643c5f90f11c47c6b38d8c672b194f3b329ebd643c93c8781692f1d490f1bc42c6b39f8ca78c8c670819cf91643cadc8783e24e39945c6f32c19cf4a329e15643c2790f1bc45c6b3858ca7848ca7948c673e194f2d19cf4b643ca792f10c25e3399a8ca70d19cf93643c4f93f1bc49c6f30619cf49643c9bc9783691f11c46c6d3818c671719cf7b643c45043c09e008c026ff6f0936f90ecf7eb07daef37bc126dff0790d6c9fe9fcc3607bd0626b61e1138619609377653f079bdc9f79086cf2cec4676093f306f1afe65775fc3a7f0b5846fcb4b4f0a3bfcf2c5c92c7ed2dcb5405f16e6ff45515d8bf795764301e6c9ef7c8787691f17420e3398c8c671319cf66329e93c878de20e379938ce769329e27c978da90f11c4dc633948ce754329e97c8786ac978e693f19492f19490f16c21e3798b8ce704329e15643c2bc9789e25e39945c6f321194f2b329e23c9788690f19491f1ec27e379858ca7868c672119cf24329ebd643cedc878b692f16c23e3398e8ce70b329e55643cabc978ce20e3e94cc6f33c19cf1c329e9bc978fa91f1b424e3399c8ce71c329ec1643c2793f15493f13c45c65347c6f304194f5b329e2e643cdbc978de26e339868ca79c8c670d19cf5a329ed3c8785e24e3594cc6f33a19cf3c329ef3c8782ac878da93f11c4ac6732219cf08329eb3c8789e21e3399b8c672619cf97643cadc978de21e3d941c6731419cf3a329ef5643c1dc9785e26e35942c6b3948c6701194f828ce778329e73c9788693f19c49c6f31c19cf6c329e62329ef3c9787692f1bc4bc6730419cf06329e8d643ca790f1bc4ac6b38c8c673919cf22329e89643caf91f11c42c6732c19cf30329ed3c9785e20e31943c633978ca7928ca7858567bf231ef9568cac5be6f73773df3b0ddf3b0bc4f73b86ef770ac4f776c3f7f602f1bdd5f0bdb5407c6f317c6f2910df9b0cdf9b0ac4f706c3f78602f1bdcef0bdae407caf317caf2910dfab0cdfab0ac4f70ac3f78a02f1fd86e1fb8d02f1bdccf0bdac407c2f317c2f2910df8b0ddf8b0bc437f3f5b7fa4e98f455dea57f13f0ff0a607ccd11e37e8351e65f0346b1e1f7a82b1cf1445dbb5710f8565ac8bd2c79e69980ff5702a3ab98aa301865de16533b81a7d2114fd43d874a02df4a0b79175bfa5426e0ff38feb2ab98aa341865de1653ef004f3f473c51f74afa11f8565ac8bbcff2ce5f02fe8fe3adbb8aa97e06a3ccdb626a3bf00c76c413758f6730816fa5857c2b4cbe499380ffe3f88cae626ab0c128f3b698c2f1738738e289ba373584c0b7d242beb52bdfbc4cc0ff71fc26573135c46094795b4ce1f871431df144dd531b4ae05b6921cf82e51bed09f8ff3060741553430d4699b7c5148e7733cc114fd4bdc06104be9516c3755efa5825e0ffc381d1554c0d331865de16531b8067b8239ea87b98c3097c2b2d46e8bcbcc39180ff8f0046573135dc6094795b4cad039e118e78a2eebd8e20f0adb4a8d6f9b5fa3701ffaf0646573135c26094795b4cad019e6a473c51f78cab097c2b2d6a745ebe399780ffe3f8ef231c31561b8c323f0218c5b60a786a1cf144ddebae21f0adb4906ffbafd4bf09f83f8ec7ea2aa66a0c4699b7c5148e075deb8827ea1e7d2d816fa5c5189d97316112f0ff31c0e82aa66a0d4699b7c5148e5f39c6114fd4b3853104be9516f26daee5fa3701ffaf0346573135c66094795b4c2d039e3a473c4b0c9e25162d0e966fa585f4e55eaa7f13f0ff89c0e82aa6ea0c4699b7c5d412e099e88827ea59ce4402df4a0bf9b6f6ebfa3701ff9f048cae626aa2c128f3b6985a0c3c931cf1443d839a9403df51cf5372e13bead9402e7c47dde7ce85efa87bb6b9f01d75ff3117bea3eea5e5c277d47da15cf88ebac7910bdf51d7ebb9f01d75ed990bdf51d751b9f01d754d900bdf51e7b7b9f01d75ae960bdf51e71dbe3df7ed79dcbe0fe6b943a1b6e707f3187a308f25fedac05f1be4cab73f96f86b835cf92ed46b03df9ee7be3d97ebafa220fa7aec0d47be9719be651e9fb32c73e47b89e15be6f199c11247be171bbe651eef7f2f76e4bbd4f02df38b73e0bbbde1bb7d0e7d77307c77b0f876b0bd9389a0e1f5b730e05405798c81d71d68e1a89ee56abd4bf5babe8a71bdb6fb36e6fe520a6596827eaedb0e59b7d976e42333c645517cbecb13e043be4ba66cf2fcf815b049bbff32d8a45fc04b609363d38b609367522f804d9e593d0fb6313aff21d8e4d931f6d997e7ffdbc156adf3d8577c84ce6f059bf4a5c23ecad21f6e0bd8a44f23f68d957ea99bc0267d8bb14fa6f40fdf0036e9e38f7d01e53d8d756093776db00f9abc2fb5066c7b751efb3ec9776856816d86ceaf04db1f747e05d81ed0f99bc1f6a9ce7f09b6dfebfc62b0ddaff3af83ed773abf146cf7e9fc7360fbadce3f0bb67b75fe19b0dda3f3f82edb6f74fe3db07da2f3f80ed5749ddf09b65feb3cbebb73b7cebf03b65fe9fcd3609ba6f34f816daace2f02db2f757e21d87ea1f30bc03645e7e783ede73a3f0f6c93757e2ed87ea6f373c03641e76783eda73a3f0b6ce3757e26d8c6e9fc9360fb89ce3f01b61febfc1760bb53e79780ad85ce2f039b8c1989fd548a75fe0db0b5d279ec7f24dff79f04b6363a3f116c6d75be0e6cf26db8316093f1a06bc196d0f91ab095e87c35d8e4fc6c04d864fc93e1609373a961603b4ce787824dce7b86804dc6b31c0c36f906693fb01da9f39560936feb5780ed689ddf0f361973ec35b0c977ebf6824dc6627e086cf2bdea19603b41e7ff00361987e501b09da4f39f82ed649dff3dd8e41b9ef783ad4ce77f07b68e3a7f1fd84ed5f9df824dc6c8ba176ca7ebfc3d6093b1837f0336f9def32760eba4f3d3c17696ceff1a6c3296c8dd6093f1417f05b6ce3a3f0d6cf21deea9603b4fe77f093619efef1760936f0c4f019b8cebf673b075d5f9c9604beafccfc0d64de72780adbbceff146c3d747e3cd87aeafc38b0f5d2f99f80adb7ceff186c7d745eda19b53fabfd7c9f9eaf0ae23b2f53fede0f1a4e99ae0d840179e23cd72e051ef4b527f6ba2753e7f5b2dfb7d0eb9518da03be77c5ee3b7d4db15bafab955eef2ec3773194394b370e6ab977e1ff555007590eef63c9ba6599f361d9f78c75b7d7f5ddeda8bebb0c26e1de0d4c52e6dc53eacbfe50e7dbc23231b2a5ae8f25d602d010a72ac80b831bad92e578dedb189eddc0b327769ef4f5ba8b98c07d2beeeb75f33eae196ba5506617e8f79e03fd705f9775cbbcf8f3cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfcccfac78f6e93c3e579672fb4818c5b607785cdce7c7e7b0f8ccebbd53eafdee89dd6fc3e77badf57acb8d3a174399afe099d35e9d2f81ffcb768bda960e9e1366dc96e2af04ea83cf82f639e2d963f0ecb16821f9b2d87c2747b9d13859aefab2a867ec7b0d5df7593475b5bfeed1eb2a3234c5fdf57d83079f8d9600ef07fa3701ebf900eae0601fcf1817e20ff7a53d6093fcfbc0e8623be3b144da03791e2efef0b9f8af8de7e2f16ffb64b9cb76439ef99bcfdbb1ae52e6f7d0f67da6f3d837641faceb1f96ffcb94e939b5e8a7eabc23fe3aa7b6aff46994edbbc3e2fb6d608dc9778377688a74123f622f86fcdfa13f8794133d446b61c7f1ca91dd5cee7d63b95228b3d352ffaa20defaef30787618cc2a76be8038fb071cff5db5493b23343a1f3492327b40a3bd8e78f6183cc221fe5419d9fe6d8c32b26c3194f99fd046a9ba483b2ff5c4be2d780c70751c135fb26e99b79d1bef0646b38e2a3e061d5dcfbb2776defceaffd5a62cfd8bed7a5cfdbf64ddedf5b2c21118eb2f87f5ff8b2b883eb6fc6bfb96d5afdf65ffb2bd469d856537304999f665f5652fd1f96ccef50fd6755bd4b9fe4e073c89a0e1b5b79a321ddff118f32efc5fca947fb3a9aba37a96db8e5def19752a85329da09e0ece6332be0bbc037cbbd8e6a8859c43ed32b42886321dcbd2bfd27644e988d7aabb735297a4f57cb0dc521729d3a9acbe2e6dc11e2793cbed86e7596abd7b2c759532e796d597eda2f309d84ed896f6b3fc5fa64ced018ec5b32dfe3aa7b6afbcf326db779bc5f75bc01a93ef06df0291f37df123f662c85796d5979572a287682dec6a1f9177fe90dd5c6e97b15c2994d96ea97f55106ffdb7193cdb0c66153b5dcbeaf312472edbcded111a9583465206ef1fcbb11ddfbbb31df7f738e28e3aeeef0146b3ddc47317976c7b0d36f31eaaed7c50cac8b2783e786559fa57b5b3094b59f3deb08bfb98f80e6a00f5088cbaca8431e0e0dab03b5e3b493b257eba807d8fce8bce5d0ced8aa1cce0b2f4afc3f36eebbd4bf3fa0eaf2984dbdcb7f0dd8fa165f5dc3876e21efd5b02b68ff4afa3ebb4eeb67b86c261bb6738a2ac9e1d9715ae0f2d7531af915b045fbfa7fe955116efbb655acecc9be3502a7d3f32cad9fce0354f6cef6a742d2f47a61681fd7ec1fb067b51f0f53137653fc09833efa37431d683f751eacad2bfd2269965559bf43f8eacd747b6a36887ed09c6e4fbc058a5f3e5df6cea6aabbfcc8b3fc5f8815107376d57fa7da56cee03ef051e176dbba336ba1c8fb16d635b6f9f6adbf1ff7d43ab1c3eafb51ef3cd67ee6d8d7c3cbe9335b6fb4f362d7659785c3d4789d26297c5777c5af41c653b7ed8b4c865df87282ddeb3f88e518b5abcef99498b772d3c2eee4565d2e25d8beff8b4e8559ee9b9066ab1d3c2e3eade439416e22f5be6f70898db1af9787c77afb6dd27b369b1c3c2e3eaba394a8b1d16dff169d1b527dea3cba4c53b169ef8efcf65d6e21d8beff8b4e8dd07efe165d2e26d0b8fab67ba515abc6df11d635c8cb6ddcbb169b1ddc2b33dc75a6cb7f88ef1fcb0a7ed5e9b4d8b6d161e07f75d336ab1cde23b462d46e27dd74c5a6cb5f06ccdb1165b2dbee3d3a2ba87ed9eb04d8bb72c3caeee094769f196c5777c5a8cecad7c6f6984165b2c3c5b72acc5168bef18afa15271b1b9115a6cb6f06cceb1169b2dbee3d3a22675aeb5a9115a6cb2f06ccab1169b2cbee3d3a23c754cddd8082d365a7836e6588b8d16df31c645ea7a724323b4d860e1d990632d36587cc7781c49c5c5fa4668b1dec2b33ec75aacb7f88e4f8bdad4fda7758dd0629d85675d8eb55867f11de33d97545cac6d84166b2d3c6b73acc55a8beff8b4e8963aa6ae6984166b2c3c6b72acc51a8beff8b4189d7a26b6ba115aacb6f0acceb116ab2dbe633cef4cb517ab1aa1c52a0bcfaa1c6bb1cae23bc6f3ced4fd8b958dd062a58567658eb55869f11d63db993aef5cd1082d56587856e4588b1516df319e77a6b478b3115abc69e17933c75abc69f11de37967ea38f24623b478c3c2e36a0c94282ddeb0f88e312e526de7f24668b1dcc2b33cc75a2cb7f88ef1be56aaed5cd6082d9659785c8dd710a5c5328bef18af4752f7f89636428ba5169ea539d662a9c5778ccf8a52e7e04b1aa1c5120bcf921c6bb1047cef8ddd77ba3fb7f890be58e7195a144399933ba67fa52f56948eb20eec578675793df6baa4fb952d8ea8cbeb501729733ad4a56de0648ca2ee8eea9a8a99d7f4baa46ffa0796ba4a99b33bd697edacf309d8261fc2bafa5afe2f5391315f0579d14fd5f995f8eb9c8a55194346b6ef2b16df2f016b4cbebba2ef229dc48fd88b21dfa7637d5929277a88d6c2aef69157751ed9cde59618cb954299572df5af0ae2adff2b06cf2b0673eabd0788338923376d579ae9d5088dce038da40cf6d9fbc0118fd9875038c49f2a23dbbf8d5106fb504a990ba08dc27ea552cf44f0f57e938edab2aec82eeb9679f1570ab6bdc068d651c5c727d0f753c68a907124944dc685e806ebe965d8545d7b3baaabf89275cb7c6f6094712a7ae59e31d958c69e06a3e2e9eb40331c7b43a64cc78bbec0d3c7018fa37aa68e4315469d7a1b752a8532f86e6385837a16815f59b7cc57806f17db1cb59063f2d98616c550668471fe18a5a3ac43c56f2f4b5dfa3bae8bac5bdaa5fe39f05d69f8ee61f84e040db7731064debf2a81b99f0366b5de01f1afb71ccfdb24a6c44f0fa8d340d020ae3ae1bae43c6fa0a16d31e4a7c1799e9493b272fc127615cbb22d91dd5caeafb15c2994e96fa97f55106ffd07183c030c6675ecbe13ceed1cec0fa918e86f70c87c0fd06e408476fd413b2983c7bf9e8eb4eb67f0c87c4fe091739c0ab0c9b982f027e0ffdd72c06db67b15166eb1e138713d2d8c3de2674c9debf4341865be07308aad1ff0543ad2ccdcd6671bfae071b98d5146962d8632b3e1d898b09455fb5da7a2fa7ab5d4f6d8de1dd36d7a6b077ae1388d01e813181aca240c6d83fab11ce3e46917d48fd538656adde491778cbe7e74fad1a3a0151b98f85b64a9460bb061bea5c516040d87a42c069b0c49d90a6c2d0c5970284c292f43dab9900bf59075171b9c6d81254edf389ca74c9942a70df0b80865153a32a4a70e9d9b278f9d3a1ae3a395c1d994d851ff6b99a15cd4ba5c6d07739fa8827933068b1df96f09f5ad8279f1a7b64da9ce4f1c39eaae8193ef98367ef484a953502873c7c67c51d0700398bf5182bbdae93000b0c2d838b432ea850d86fc4f364cbbf839bbe398b9a63601f893a91de8768803ddd4fa65ecdb5123c78dbb765af5b8b1a32e993661d4d4b17513706bb635948bdad2f2ffd660b335f158564dd86ce1b26d2c36db84a30cb7059b1cb90e019bf0b4035b4bc84b7973cb3809d74eb07ed9a5d4ff9438ad74c5db04f521208763d5aeaafd577d3e569d06a9a18ed5d0c66a73aaa18bd51d433534b1fa8a9d1a7a580d35ac86163e3e480f1dac860a3e29480f05acbe765116a487f63d35480fdd7b7a901e9af74ce0fb0e309f15a44fbbd4d0ba9d83f4d0b9ead6a57a755d7de64dbd5baf4edfd56d0175caab2ef1d4e9a73aed549717eaf685ba95a54ee9d4e9b23a1554a76fea726480d67a60982e08d38561ba284c1787e992305d1aa6cbc2747998ae08d39561ba2a4c83c2747598ae09d3b561ba2e4cd787e98630dd18a48777be29480fbfae867fbe25480f0d7d6b901e36fab6203da4f4ed417ab8e991417a28ea51417a98ead1417a08eb3b82f4f0d66383f430b97705e9a176c707e9e17ad570d86a986c357cb61ae6570d09ac861456430dab6189d510c66a08643534f27d417ac8653564f383417ad8e719617a384c8f84e9d1307d2b4c8f85e9f1203d3cb81a367c66901e665c0d3f3e27480f573e2f480f6fae863d57c3a1ab61d2d5f0e96a587535ccbb1afe5d0d0bff7c985e08d38b41fa91847a14a31e51a8dbffea3198ba45fd7a90be75be34483fe2568ffc551708d5254475915919a4bb50a92e65aa8b9dea72a8ba60aa2ea9aa8baeeab2acba70ab2eedaa8bbf7ae541bd02a25e8951af08a957a6d42b64ea953af58aa17a4d54bd76a95e2356af55ef09d2b7c5f705e947a5ea76b87a34a06e99abdbf71f87e9db413a26bf1ba6ef85e9fb61fa41987e18a61f05e9618dd570c76ab86435b4b21a86590dd9ac8672564341ab61a33f09d2434faba1ab7f17a487c4fe344c9f85e9f3203dbcf61761fa6398be0cd39fc2f4e730fd254c7f0dd3dfc2f46f61faf730fd4798fe1ea67f84e99f41fd30dbd8901caf5b1f7d05138c9c3a75f4f88953cba6d6958d9f366eead889e3ee2d9b3e76ea98b2babb474fae1d57371d17fe8e5e58c6081f3879f2c87bcbc64ea8197d4f59ddb4a96575b565d575d326d4343888ff452f74e2d73d8eaca98976f65fdf84f4ff34d1e921ba5d94d1d72fcf5cb792964d10e4f0a62cd4b365d32a34591fc1e452f786f47970d994717553cbcacb26847fc3036fddf4d1355dcaf07f534291a74c2d9b3275e4e4a965b593ebc69775ed82eb7da85d132af1dfeddcc09c717cd3c4e9a4bfb3d4a410fbd5294d50e03f4f691a69ebb26f40daaeac694ecbca9a50c3339bb2d0154d24bcb12c529629d3aaa74e1e396a6af4c2b77c93856f6f4a352734b19a27756c82b3d39ab2d0c08e4d23bcbd29ce6665e12cf8ffbd834b67845506009b2d6c6f00000028401f8b08000000000000ffed9d77941cc5b5c67b3629cc8e562b6995c39264a55dcdcee6555ae52c106072d04a5a2119492ba4251963c08073ced938e300d838e28073ce09837304836d78ffbce377de3b87f3aa7aea7abf2d558f7786aed5ed9ddbe75c4df59d9abebffafa564d6f554feba9200852417eab54764670f246eff79ad7ec33db5a623c56d627672a219c1509e1ac4c0867554238ab13c2599310ce7109e11c9f10ce0931726ab68a60f81637ef440fbac6cd984e98a6b509d03493304d272540d3ba201963d4e48470d62784734a4238a72684735a42381b12c2393d219c3312c23933219cb312c2393b219c7312c23937219cf312c2393f219c0b12c2d99810ced312c2797a4238cf4808e79909e13c2b46cea5c0b9d0bc3ecbbc2e32af8bcdeb12f34a9f59665e9b4c1babcc7eb3b2e59a4d598bf55e4e59abb23665edd67b1dca3a957529eb36ef359af77a94ad50b652d92a65ab95ad313aac55b64ed97a651b946d54b649d966655b946d55b64dd976653b94ed54b64bd9d9cace51b65bd9b9cace5376beb2672bbb40d985ca2e5276b1c57289b24b955da6ec72655728bb52d91e657dcaf62adba76cbfb27e6507945da5eca0b243ca9ea3ec6a6587951d517654d980b263caae51765cd9096583caae55769db2eb95dda0ec464bb3e72abb49d9f394dd6c713e5fd92dca6e55769bb21728bb5dd91dcaee54f642652f52f662652f51f652652f53f67265af50f64a65af52f66a65af51f65a65af53f67a656f50f646656f52f666656f51f656656f53f67665ef302cd411dea9ec5dcaee52f66e65ef51f65e65ef53f67e651f50f64165772bfb90b20f2bfb88b28f2abb47d9bdcaee53f631651f5776bfb24f28fba4b24f29fbb4b2cf28fbacb207947d4ed9e7957d41d917953da8ec4bcabeacec2bcabeaaec6bcabeaeec1bcabea9ec5bcabeadec3bcabeabec7bcabeafec0796e63f54f623653f56f613e3fba979fd99a94bf3623f57f60b537ec8bcfed2bc3e6c5e1fb13ef32b65bfb67cbf51f65bcbf73b65bf37e53f98d73f9ad73f99d73f9bd7bf98d7bf9ad747cdeb63e6f56fe6f571f3fa8479fdbb79fd8779fda7797dd2bc3ea5ec9c867c797c30b4f506318d516d07b27a4d85c45f180cdfb41695e63d7a6d34fe2ab34fafa45db5d9afb6fc3566bfc63ace78b33fdef2d79bfd7acb3fd5ec4fb5fc0d66bfc1f2cf30fb332cff9966ff4cf0a7039873357eedab34ae14f8285f2bc0576d7c95e0aba1c3816f9cf155838fce6f0df82618df38f04d34bef1e04b1bdf04d25259adf1f50671e54ab64f1f3713f771cd3ad4a4f879f7e9e3d679e29d1c3f6fbf3e6ebd075e9d1f53ccb12643de4c35be7af04d33be29e03343d0bffb9cf64d37be69e09b617c0de09b697cd3c137cbf866806fb6f1cd04df1ce39b05beb9c6371b7cf38c6f0ef8e61bdf5cf02d30be79e06b34bef9e03bcdf81680ef74e36b041fdde3721af8ce34bed3c17796f19d013e1a6bcf041f5d1b9e657c7a9c189f82cf183f8d51e167687c06df221a9bc1b798c665f02da131197c4b2136f996c1b842be26e3a3314abfd763cabd415c7d2217f68915711f571d591f7755fcc70dd7ed560743baf6429c15a0d51a538ef1dea0168c9d324671c85f05e5ad5097ea911ef43d43ecfafb64a529af29f0b91eeb7319a8b3d2d1fede20def6afb2785659ccd5d07e3f39db9a939c1df15674ce5e0875eddca36b9eb198b33b80c343ce7648ce8e782b3a67fba1ae9d7b74dd3b1673f612e0f090b37d7e723697959ccdcf9105813bf7e86f9fb198b3078123fe9c6d979c1df95674cede0675eddca3bf7fc762ce5e071cf1e76c679f5c1b8c782b3a675f0575eddca3b998b198b3770087879ced977176c45bd139fb0ea86be71ecd0b8ec59c7d2d70c49fb3dd9e72b6557236c8af7706813bf7688e7a2ce6ec5dc0117fceee93f9d9916f45e7ec0350d7ce3d5a2f198b397baf29eb75869f9a7586b9e0fb99f1cd03def8737b7f9ba7dcce496ee7ef030902778ed2dadd58cced074d59e7f14370ef01f97e697ca781ef61e33b1d7c8f18df19d02e0f7da04ffac088b7a2fbc0afa1ae9dcbb48e3c16fbc08f81c343ceee939c1df15674ce3e0e75eddca37b1ac662cefe0e383ce46cbfe4ec88b7a273f65f50d7cebd45a63c167396ee2bd5d70b7f30d70b4bc0f747e35b0abe3f19df32f0fdd9f89ac0f717e36b06df5f8d6f39f81e35be2cf81e33be16f0fdcdf872e07bdcf85ac1f784f1b581efefc6d70ebe7f185f07f8fe697c9de07bd2f8bac0f794f1751b9f5eefa27bafbe6b7cfadc9246bd41bce796eeb1a463d3feb251885d67c5ae1bc5d8f556ec7a47ec260fb1d31083b694b5df0be526bf3cd94c30fcf71f146b79fcb15a75db9b8391b77d39f0643db43d0d3146c293059e96f879c27b7d73f11f373cc7cd96a66988d50ced6af5d0ae14c4a263d33ec5cb800fc7ef5607635bfc8cb914c4a263d37e1b30920fbf4fe87b9dfa8ffe3e5c981ae2f5d097c26b228cd70b1c14af0aea3c396da8ee12c3560befe3776b8be5f39497615e502c3a36ed53bc5a684fcbe833e646ca98b5187d8d11298845c7b663637f6f1a7dcd46745e33e03b056352aed431a916d846e33a25ea5c7389ede3fb2a0531686c23cd295e15d4995e395477338cbb1efa5faed8eb371c0fe2cfe35c16fbf548785a81c747dff7d45fb3f8bdff74106faeb55b5ab5585a65a04e1be8d7ee41bf42d721144f98855998855998855998855998855998855998855998855998855998855998f933e3fd17b8be49f5963161245f0e787cccf387cf8f32c7a2e3eb759d87615d27fe758b5c16d72ce91ec3c5569baba0ce13a921b6dfc07ababd36886b9acbfc6a37a2fb2c6a8393d7627dae2146ad03bbd62f1b638b9ddbe76bbd4d3f43453f87acd9d2759943530ff7a90cd33465698af7292eb578749eceaa1c62f3b1f657ec5a246a45e538d7f6f01e03bfe7253f7e502e5404c3c70ffc9ee9883df6f0354c5a2fefb06257419dff490d9d9b2e78bf3738f99e275da7d33a367d66317cb6d33a769df92c71d458c76f86cf529dff8331f59d15c1bf35f371ff078ecb01b415b75e28e3ba79fcdfc3f975fcd62278da81c7c738e3e97a238b7d20ee75fc4e4b2bd7750cd5e900fd3a3de8e7ba16a57d8a27ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccfc99f1b7a2c49a867a39268ca374ef43b89e41cf7fc1b5a997570cc5f5bd0e476b4e4bac3657419d1f540cb1bdda946b8393ef77883a971ed6f30a9e4b8a570bedc1b5205fbfe76eb378da1c5a50b931b6d8f975fcf8351e5ac76fb574cd3934f5d55f718d1535c5feda62f1e0da686d70f2bd256938ce68dc3b149517140ffb521bf8a88cbf8ff6719ef1bbc4beaf87e2e1faf5dd46dbbac0d7b9cf657d8e1bb4364f6bf5ad8eb6529d7b60ecbbcf94f11e0ebc77e441c7fbb4155aa726fdbc3ccb2e9b5ff7a567c0d1f9ed71c45e09ac31c56ec1d829631487fc5550fe62c5505daa477a90d6c4aefb083d130cd9edcfb5589fcb409d6e47fb7b8378dbdf63f1f458cc3a77ee873c7b10beff7d8d49dd111a2d068da80e5e07f9ba27cf1e23edfb1bf1bebd71561dbc66a13adf84312aeafe51d73d87bebec7a2ee39745d1bb703a3dd46fb3ecf72bf4feb21182fe2be4feb21c821bc4f2bb08ebf048e4f5ce382e8ef16aaf32bebf8f635397d06ef03a33abf85f1a2cedcb3581b9c7cfd8df74c8dc6df5751f749533cbcaec1befd9fdaae99bba07e6f8ccc9813c882f944751eb3ce596704f772c7679f88f82c69d564caf8f78bad9fd6a11b3ed31b8b0ef93edf63b585f2ba1bda4275fecbba068cffba257f0d187f5b875f93d038d0e6682bd5f96fe86bff826b3c3a4f385ed5549efc3e6d85ae01493fdde6d17e3e30c6e6f07ce0eacaa1baf6737e49eb629f0fdc617d8ee3f381ff17f2ac06ee43f73556af8cd06809684475f0b741f43d82cff2757dc7f8bab73fea3bc6f50c4a1cdbeb2a479fcd9e57735d23501dfa2c5e234c33cc754667bbae3d5f48df9771de378cbf956886b8f85b89664f7a6641b75ed8c7eb8253193beb2976d433a7b3a3103bea99d3a311bbde8a5d3f8ab14573d19c93e61e9e891cfefe0c9f59aab742d7a5c49081cf552480b132018c550960ac4e00634d0218c72580717c021827248071620218d3c0782abfdb3de8932b551f5fe7abd0b506c66ef2a44531ff7f87e7ff4ba5e0b50fc6f6f0375da8455330722df0ef3c1fcf7e28f6ff7a2106fcbf0ba62480716a0218a72580b121018cd313c03823018c3313c0382b018cb313c03827018c7313c0382f018cf313c0b820018c8d09603c2d018ca72780f18c04309e9900c6b312c0b8501863615cea9731572aa3e6f1f17ffe3d93ff73cc034fd675cfa9a7df9e14fdffad797e3e694ba9cf8dc37b4bfcfe9f70cfecd9763eee1d29f6d97685febf554f8cb952197dddc78ebfe319090ffe2ed2f5db1a0f8cb952197dfdfe057fa337129e0ed0acdda19907c65ca98cbeee952bf65e4ebca7bfc3a19907c65ca98c785f758c3ca1669d45f07481669d0ecd3c30e64a65f4755f721a628c84a71b34eb7268e68131572aa3a7dfb6859a7517c183bf01eb7668e68131572aa3e659e149b39e22785680663d0ecd3831224fdccfc9ee71c4f2f19bc162db4e0cc83821018c1313c088f749f818bf0add27d1e3579f5ca9faf83a5f85ee93c0d81e7e1f136a81bf87f84f5aacf2cb53f03e098cbdda9316f87b95ffa4c56ae0f1f1fb9934c418090f3164e0735312c03835018cd312c0d89000c6e909609c9100c69909609c9500c6d909609c9300c6b909609c9700c6f909605c900046fc5bd5c3b562c1bf5f568ff1d8517fab8cf5d8517f978cf5d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e439a7d84998e317c6b1c7883c8df1f164b1ed18ab9741db7b1d3c294f6dc7586b19b49d1892c6b826018c2b12c0283ae6ef412c8551f3acf3c4b3b6089e75c0b3de13cfba2278d603cf86f879c29c5a5f040f3164e0732b12c0b826018ca2a3e8c88951742c1f1d8551188551184f056312c670614c443ee64a65d43c1be3e70935db5004cf46d08c3ed7e29731572aa3e6d9143f4fa8d9c622783681661b1d9a7960cc95caa87936c7cf136ab6a9089ecda0d92687661e1873a5326a9e2df1f3849a6d2e82670b68b6d9a19907c65ca98c9a676bfc3ca1665b8ae0d90a9a6d7168e68131572aa3e6d9163f4fa8d9d62278b681665b1d9a7960cc95caa879b6c7cf136ab6ad089eeda0d93687661e1873a5326a9e1df1f3849a6d2f82670768b6dda19907c65ca98c9a6767fc3ca1663b8ae0d9099aed7068c69571450218d72480d1b38eb9521935cf2e4f3c3b8be0d9053c677be2d95504cfd9c0734efc3c614e9d5d040f3164e0732b12c0b826018ca2a3e8c88951742c1f1d85511885b138c6de0430cab91646ae8c1efebe2af81b9ab3c778ec3a2b765d99c48efa0dcd588f2d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e738abd3bfed8b9629f31b31b787c3cf3c6533bb3fab8e79a633d1da37e5aabf32cadceb6b4ca409d7341bff33ce89782b8746cdaa778c5323f8b01b3a7d8b949ea1813a0fd14638da5878e7fbea7b6478df5e78ff1d85163fd588f1d35d68ff5d892e792e7e5105bf25cf2bc1c624b9e4b9e73898de5ea60e8ba9d9e7faa8ff16c783f65b1eaad0aea9c332eff5a17481ff2115bfa907c5794436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf29c5f9e633e548c024f60f10405785633e3d9c68c6733339e2e663cf399f1b433e399c98c27c78c670a339e0dcc782630e359cc8ca79219cf5a663c59663c3b98f12c60c6b38419cf2c663c5399f14c64c653c58c671d339ee5cc787632e3d9ce8ca78719cf42663cddcc783632e3e960c6339b194f2b339e69cc789632e34933e36966c653cd8c670b339e26663c8b98f1ec62c6b39219cf1c663c0dcc786a99f16498f1d430e359c58c672b339e4dcc783a99f1cc65c6d3c68c673a339e65cc782631e3a963c6b39e19cf38663cf398f1cc60c63399194f3d339ef1cc7846e37943c5f0a418f0a483939f499686f77783afc2faac1eaf5a1a86debfc0f82be033179a72a5e3d817808f7e1b7ea1e3b3a8d305d0965e53ce3eb32dd40963f5c23ec5ab058e0b99f0ec66c6339e194f3d339ec9cc786630e399c78c671c339ef5cc78ea98f14c62c6b38c19cf74663c6dcc78e632e3e964c6b38919cf56663cab98f1d430e3c930e3a965c6d3c08c670e339e95cc787631e359c48ca78919cf16663cd5cc789a99f1a499f12c65c6338d194f2b339ed9cc783a98f16c64c6d3cd8c6721339e1e663cdb99f1ec64c6b39c19cf3a663c55cc782632e399ca8c6716339e25cc781630e3d9c18c27cb8c672d339e4a663c8b99f14c60c6b38119cf14663c39663c3399f1b433e399cf8ca78b19cf66663cdb98f1ac66c653e1e0f1f0ff5f863c74ff1a1d9bf6773389ede13c84ffefe7459eda74b139568d392ef153bc2aa87389b930d0f7a3e06789cbbedf10ef9dbb1834bad8535be87ca4acf3e339760eefab0c8021b0f4091c3c3eee47f5d4ce617918e3ff3f9bd55a5d6269659fbb0cd4b908f4bbc4837eaedcfe771f30af4964d63cf4dd41ac69a8b79a0923f9cef7cb13f6dbd5c1f0ad50bfbd04787c8c619eda19f6af4bad36ad76e84e7530572ff5d04e57dfa1fd4be13c248d59f3ac3565624d43bdb54c18c977b15f9eb07fad0d866f85fad7a5c0e363fcf1d4ceb07f5d66b569ad4377aa83b97a998776bafa0eed5f06e72169cc9a679d29136b1aeaad63c248be4bfcf2b4a5a1cdb415ea5f97018f8ff1c7533bc3fe75b9d5a6750edda90ee6eae51edae9ea3bb47f399c0761166617b3e6a1df98106b1aeaad67c248be4bbdf2b465d3d066da0a8d6397038f8f71de93eee1387685d5a6f50edda90ee6ea151edae9ea3bb47f8523766310af16578e408b2b1d3c578eb21614af58e68b12c82c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e8ac37d15974169d45e738984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da39839e8ac79e81931c49a867a1b983092ef32bf3ce1ef823604c3b794b5df0be52b81e7720ffa786a67780ff91eab4d1b1cba531dec5f7b3cb4d3d577687f0f9c873d45305f914066d1b93466cd43cf8a25d634d4dbc884917c97fbe509c7b18dc1f0add038b607787c8cf39eda198e637d569b363a74a73ad8bffa3cb4d3d577689fe209b33047316b1efa3f6c88350df536316124df955e7972e1ef1b3705c3b742e3581ff0ec899d273f8e79d03d1cc7f65a6ddae4d09dea60aeeef5d04e57dfa1fdbd701e8a61be2281cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a978fce9a87feef10624d43bdcd4c18c9b7c72b4f6bb8eeb03918bea5acfd5e28ef059ebed879f2eb0e1e740fd71df6596ddaecd09dea60ffdae7a19daebe43fbfbe03c8c75e62b12c82cb9313acc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc1c7243f36c3165624d43bd2d4c18c9d7e797277ceec19660f856e8be9d7dc0b3d7833e9eda19deb7b3df6ad31687ee5407fbd77e0fed74f51ddadf0fe7419885d9c5ac79b69a32b1a6a1de56268ce4dbeb97271cc7b606c3b742e3d87ee0f131ce7b6a67388ef55b6ddaead09dea60aef67b68a7abefd07e3f9c0761166617b3e6d966cac49a867adb9830926f9f5f9e701cdb160cdf0a8d63fdc0e3639cf7d4ce701c3b60b5699b4377aa83b97ac0433b5d7d87f60fc07910666176316b9eeda64cac69a8b79d0923f9f6fbe5c9a5a1cdb4151ac70e008f8f71de533bc371ec2aab4ddb1dba531dccd5ab3cb4d3d57768ff2a380f4963d63c3b4c9958d3506f071346f2f5fbe509fbd78e60f856a87f5d053c3ec61f4fed0cfbd741ab4d3b1cba531dccd5831edae9ea3bb47f10ce43d29835cf4e5326d634d4dbc984917c07fcf284fd6b67307c2bd4bf0e028f8ff1c7533bc3fe75c86ad34e87ee540773f5908776bafa0eed1f82f3903466cdb3cb9489350df5763161241f7e5fecf2c493b178320e2dc662ec3a2b765d99c4aeb762d797496cc973c9f372882d792e795e0eb125cf25cfcb2176b9e69a685e9e9aa74ea1e6a953a8794a3467a9f9d3f1c56ec771a502621df4d44edc7aa18cf373b47531e399cf8ca79d19cf4c663c39663c5398f14c60c6b398194f25339e2c339e05cc789630e399c58c672a339e89cc78aa98f12c67c6d3c38c6721339e6e663c1dcc786633e36965c6338d19cf52663c69663ccdcc78aa99f13431e359c48c6725339e39cc781a98f1d432e3c930e3d9cd8ca78619cf2a663c9dcc78e632e36963c6339d19cf32663c9398f1d431e319c78c671e339e19cc782633e3a967c6339e194f8a014f3a38f9f728f87b824af0d1fdfdbbc0f71c53de0dbe0a470c3ace21f0d1fc291d438f372b1b4e66a880cf5cede07a8e231ec5b9daf1d9d1d01d63f5c23ec5ab058eab99f08c67c653cf8c6732339e19cc78e631e319c78ca78e19cf24663ccb98f14c67c6d3c68c672e339e4e663cab98f1d430e3d9cd8c27c38ca796194f03339e39cc785632e359c48ca789194f35339e66663c69663c4b99f14c63c6d3ca8c6736339e0e663cddcc781632e3e961c6b39c194f15339e89cc78a632e399c58c6709339e05cc78b2cc782a99f12c66c6338119cf14663c39663c3399f1b433e399cf8ca78b194f858367b7279ea8e729ec66105bef674117bda5e1fdd1f81de06e8b91f60f0223f2124fd6134fd43328b20c62ebf6d3df12b4069786f7f1775cbe722a6b31d2be2ba7f0beb4e59e78a29edbb19c416cad05cd5dd23d0069781f7fb7e02ba7965b8cb4efcaa97abf3ce1ff2dd1140cdf0add6b847dcec739f4d4ce2cf6bf189fa1e17c167593a5153e437534ee938f1a0f289e300b7314b3e6a1b50b62c5efb3d1f8dddb48185ddfaf1e78c2f1b13918be151a1f0f028f8fef0f4fed0cc7b1c3569b9a1dba531dccd5c31edae9ea3bb47fd811bb3188578b2323d0e28883e7c8286b41f18a65de9d40660e3a6b9e65a64cac69a8b78c0923f9b27e79c2f17159307c2b343e1e011e1fdf1f9eda198e0947ad362d73e84e75b07f1df5d04e57dfa1fda3701e8a613e9c4066d1b93466cd4373c8c49a867a39268ce43be89527974d439b692b348e1d051e1fe3bc27ddc3716cc06a53cea13bd5c1fe35e0a19daebe43fb03701e845998855998855998855998855998855998855998855998855998855998859937b3e6a1df36126b1aeab5326124df11af3cf97587d660f85668dd6100787caccb78d23d5c773866b5a9d5a13bd5c15c3de6a19daebe43fbc7e03c08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300b336f66cd43cfdc26d634d46b63c248bea37e79c2df6db505c3b742eb0ec780c7c7ba8ca77686eb0ed7586d6a73e84e753057aff1d04e57dfa1fd6be03c08b330bb98350f3ddb8a58d350af9d0923f906bcf2e4d74fdb83e15ba171ec1ae0f131ce7bd23d1cc78e5b6d6a77e84e7530578f7b68a7abefd0fe71380fc5301f4e20b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcee5a3b3e6a1ff738d58d350af830923f98e79e5690dd71d3a82e15ba17587e3c0e3635dc693eee1bac309ab4d1d0edda90ef6af131edae9ea3bb47f02cec358673e9c4066c98dd16196dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e62e6901b9aa7d39489350df53a993092ef1abf3ce1730f3a83e15ba1fb764e00cf710ffa786a6778dfcea0d5a64e87ee5407fbd7a08776bafa0eed0fc27910666176316b9e2e5326d634d4eb62c248bee37e79726968336d85c6b141e0f131ce7b6a67388e5d6bb5a9cba13bd5c15cbdd6433b5d7d87f6af85f3903466cdd36dcac49a867add4c18c987dfcbdd9e7832164fc6a1c5a98aadf77b4cb9d6bca6e1fd1e60f4351e765b8cb48f398ebcc4d3e389a7cee2a9736871aa62ebf6af34e549e6350defaf04465f39d56331d2be2ba7ea8067a5279e7a8ba7dea1c5a98aadb55865ca93cd6b1ade5f058cbe726aa5c548fbae9caa079e559e78a2c6a455a3103baa7f8d46eca85c198dd8a2b9682e9a8be63e354f9d42cd53a750f39468ce4a730fd751e17c2fc5088001b75e28e3df0a3eae3d3db533ebfa7b6c95d526fc7b0ce71c4ed5df1bc22ccc51cc9ee62ddad2566cd227b078681bf4acc568ce9bf6586d4ac2bc6921e6c30964169d4b63d6b1af8b3f765bda8a4dfa04160f6dd779d6c2533bc3f1e0fac0ad31c5cb401dccd3eb3db4330571e9d8b47f3d9c8762980f279059742e8d59c7be21f6d8f9e7c9636cd227b07868bbc1b3167eda991f0f6e0cdc1a53bc0cd4c13cbdd1433b5310978e4dfb37c2791066611666611666611666611666611666611666611666611666611666611666decc3af673638f9d9fbfc7d8a44f60f1d0f65ccf5af869677efefea6c0ad31c5cb401d3ce7377968670ae2d2b169ff26380fc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc2cc9b59c77e5efcb1c3dfe3606cd227b078687b9e672d3cb5339cbfbf39706b4cf1325007cff9cd1eda9982b8746cdabf19ce83300bb38b59c77e7eecb1f3eb79189bf4092c1eda9eef590b3fedcc8f07b7046e8d295e06eae039bfc5433b5310978e4dfbb7c0792886f97002994567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a5974169da3984567d1398a59742e1f9d75ec5b638fdd1acedf636cd227b07868bbd5b3167eda999fbfbf2d706b4cf1325007f3f4360fed4c415c3a36ed53bc72603e9c4066c98dd16196dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e62e6901b3af60be28f1dfe9e1d63933e81c543db0b3c6be1a99de1fd2fb7076e8d295e06ea609edeeea19d29884bc7a6fddbe13c08b330bb9875ec3be28f9d4b5bb1499fc0e2a1ed0ecf5a786a67381edc19b835a67819a883e7fc4e0fed4c415c3a36eddf09e72169cc78fe52f1c50eefdba41815e655fb5e68ca95e07b91295781efc5a65c0dbe9798720df85e6acae3c0f732681bf95e6eca4bc1f70a535e05be579af24af0bdca947bc0f76a53ee06df6b4c79107caf35e56bc1f73a53be0e7caf37e5ebc1f70653be017c6f34e51bc1f726537e2ef8de6cca3781ef2da6fc3cf0bdd5946f06dfdb4cf9f9e07bbb29df02be7798f2ade07ba729df06be7799f242f0dde5f0bddb945f00bef798f2ede07baf29ef06dffb4c7902f8de6fca13c1f70128d3eb074db9167c779b72067c1f32e549e0fbb029d781ef23a63c197c1f35e57af0dd63ca53c077af294f05df7da63c0d7c1f33e506f07ddc94a783ef7e539e01be4f98f24cf07dd2946781ef53a63c1b7c9f36e539e0fb8c29cf05df674d791ef81e30e5f9e0fb9c292f00dfe74d19cfef174cf90ef0d1b87227f8685c7921f8685c7911f8685c7931f8685c7909f8685c7929f8685c7919f828ef5e0e3ecabb57808ff2ee95e0a3bc7b15f828ef5e0d3ecabbd7808ff2eeb5e0a3bc7b1df828ef5e0f3ecabb37808ff2ee8de0a3bc7b13f828efde0c3ecabbb7808ff2eeade0a3bc7b1bf828efde0e3ecabb77808ff2ee9de0a3bc7b17f828efee021fe5ddbbc14779f71ef0359af27bc1779a29bf0f7ca79bf2fbc1778629e33873a6297f107c6799f2dde0a3b1f043e07b96297f187c8b4cf923e05b6cca1f05df1253be077c4b4df95ef02d33e5fbc0d764ca1f035fb3297f1c7ccb4df97ef0654df913e06b31e54f822f67ca9f025fab297f1a7c6da6fc19f0b59bf267c1d761ca0f80afd3943f07be2e53fe3cf8e87b9cc619dd9f75bf241d4823eda336373bda42bef1d096de20de6b3a8a45c7a6fd5660a473901b7dc6dc48195b2c46cdd3ee4133cc2bda0afdcdd40e3c6d1e783cb533fc9ba9c36a53abd5a60cd47916b4b3c3433b5310978e4dfb1d10dbc739472d6acc7117595a54419d6af385a6bf4f0be948c7d0f99b73b4a5db735be8d8342e758f42ec4e2b76d68a8de3316d85fa572730777960d6c7ed89ffb861ff5a618e45394571b2d0a695a0415c6dc2d829631487fc55509edd305497ea911ef4fd45ec3a97e95c22bbfdb976eb7319a8d3ed687f6f106ffb7b2c9e1e8b595fd3d7350c7178e80f610e745b1cb49f05ed7a22b4eb06eda80e7eff3579d2aecbe2a1fd26e0a16b9c0ef0d1b502f1e37556f32870dbe35e87839b7c9dc0d8e460ccc5cf185eeb34598cb49f0346f275014fa727cdec73bdc8d207bf97c75975e8b3555067397c37a61d7575bf5b981a6a17fd0dfe7410ef985ee3412f9c1f08409fc0d2903662181f0ccd21c4c93331189a2338313870bcefaafe73fbfbf6a700adcac2c4d794a31915e0c372a5c31704c3a742704a96a642704ab6c29205a760a8befe534a378ba61bfa8f1c1a7cf6d1fea3fb8edf786cb07fff8e81ab90badaa247d2a8162029fa681b1f0c4ddaf406f12ec6d458b10a25cf78781d07ef539dec33db5a3cb533fcd29b60b5a9c66a5306ea54c37b133cb4330571e9d8b43fc1113bc68128d462e208b498e8e09938ca5ae0c437f9b0a7d2fbb8785261b5057b34b6c9cef3581b440117c2f153064ebfa73b7bb569ccb860e864d3e8a9af68f549d033a6fa5b4bcf88ea19503d04e9194e3da3a9bfd4f48ca59ea1d433927a0652cf38ea19463da3a86710f58ca19e216c0cf233807ac64fcff0e919bdb380edbbc0abffaad6df907a464ecfc0e919377d65a5af00f4d588befad6578a7af6435f21e8bf2cf52c83feb6d55732fa5b5a7fb3ea2b457d85a8afe8f515ae5ea55aad6c8dd17aadb275cad62bdba06ca3b24dca362bdba26cabb26dcab62bdba16ca7b25dcace56764e909f5d3f57d979cace57f66c651728bb50d945ca2e567689b24b955da6ec72655728bb52d91e657dcaf62adba76cbfb27e6507945da5eca0b243ca9ea3ecea207f87ce116547950d283ba6ec1a65c7959d08f22b667a854caf88e91530bde2a557b8f48a965ec1d22b567a854aaf48e915a85b83fc0a935e29d22b437a5540af02e8597f3dcbffe2203f8baf67ed5f16e467e5f52cbc9e75d7b3ec7a565dcfa2eb59733d4bae67c5f52cb89ef5d6b3dc7a565bcf62eb596b3d4bad67a5f52cb49e75d6b3cc7705f959643d6bac6789f5acb09e05d6b3be7a96f7ee203f8bab676df52cad9e95d5b3b07ad655cfb2ea59553d8baa674df52ca99e15d5b3a07ad653cf72ea594d3d8ba9672df52ca59e95fca2b207957d49d997957d45d957957d4dd9d7957d43d937957d4bd9b7957d27c8e7e5f7947d5fd90f94fd50d98f94fd58d94f94fd54d9cf94fd5cd92f943da4ec97ca1e56f688b25f29fbb5b2df28fbadb2df29fbbdb23f28fba3b23f29fbb3b2bf28fbabb247953da6ec6fca1e57f684b2bf2bfb87b27f2a7b52d953c1d0ea060e22ff323b34d3de3738d87fe4d860e3e040e3916b0f0f1e3a76f8c6c6eb0f0d1e6c1cb8aefff881c303d7e3873f68862d5a46587bfc78df8d8d878eeeefbfa171e0dac1c681038d7b07ae3dbaff047ee81be643734f8ed8b77f7f74b05f543c03d2474a0cfaa8f91c2dd06c2ddcb6c74b11e4a9523e34b5b2b4069d6dbe75e8aff7f3f257bb8d270e0f0c36661b8faa7ffb0eabcff4ef6f6ec4f74e28914f0c369e18ec3b3ed878e0f8c091c696663ceec5134a68445543091f6a6e1879cb83ff072748e4d5250a0400", + "packedBytecode": "0x000000028df71de500000047d81f8b08000000000000ffed9d779c14c5baf77b6141647645ccd9c5848ae232647681c19c30a38888b02c2b28b0443163961ccc19094ace02028a80184ecec993f4783ce9de7bcef9dc3fee7bef1b7c6fd74c3d777f5b542f3b6bd7f09b9deacfa776aa9fadeee75bbf7eba3a5577fd330882a22033b50cd319c1fe93fc3fa57fcbbfd9d425c67595bbe42cca13ce1679c2d9324f388bf384b3559e70b6ce13ce43f284b34d9e701e1a23a7626b11d49fe2e66deb40d7b8191379a669491e685a9a679a1e96079ab60bf2a38d3a3c4f38dbe709e71179c279649e701e95279c47e709e73179c2796c9e701e97279cc7e709e70979c279629e709e94279c27e709e72979c2796a9e7096e50967873ce13c2d4f384fcf13ce33f284f3cc3ce13c2b46ce4ec0d951ff9ead7fcfd1bfe7ea5f297b9efe3d5fff76d6752cd6f31728ae30a9873449e37f5dc3d42d4cddc3d4c3f85fcf30f50a53ef30f5d1ff2bd3ffab08536598fa86a95f98fa6b0d0684e9c2305d14a68bc37449982e0dd36561ba3c4c5784e9ca305d15a6abc334304cd784e9da305d17a6ebc37443986e0cd34d611a14a69bc3744b980687e9d6300d31586e0bd3d030dd1ea66161ba234cc3c334224c55611a19a6ea308d0a534d98ee0cd3e8308d09d35d61ba3b4c63c3342e4ce3c3541ba609619a18a649619a1ca629619a1aa67bc2342d4cf786e9be30dd6f68f640981e0cd343617ad8e09c1ea647c2f468981e0bd3e3617a224c4f86e9a9303d1da619619a19a659619a1da639619a1ba679619a1fa605615a18a667c2f46c989e0bd3f3617a214c2f86e9a530bd1ca657c2f46a985e0bd3eb617a43b3c88eb0284c6f8669719896846969989685e9ad30bd1da6e5615a11a695615a15a6d5615a13a6b5615a17a6f561da10a68d61da14a6cd617a274c5bc2b4354cdbc2f46e98b6876947987686e9bd30bd1fa65d61fa204cbbc3b4274c7bc3f46198f685e9a3307d1ca64fc2f46998be15a66f87e93b61fa6e98be17a6ef1b9aff204c3f0cd38fc2f4636dfb89fefda92e2bf7ef7e16a69febfc2ff4ef2ff5efaff4ef67c632bf0ed36f0cdb6fc3f43bc3f6fb307daef35fe8df3fe8df2ff5ef1ff5ef57faf74ffaf7cffaf72ffaf7affaf76ffaf75ff4efbfeadf7fd3bf7fd7bfffd0bfff0cd3e60e997c9ba06e4a0531b551dd6ad2cf7e44fc8e41fd4969d152ff4f7ecbb4bd58cfcbaf68d74acfb732ecadf57c6b633d6df47c1bc3de5ecfb737ec47eaf9230dfbd17afe68c37eac9e3fd6b09fa1e7cf007b22807bc3daae6c2db5a9086c12af2dc0d64adb5a82adb5ac0e6c87685b2bb0c9f66d0db643b5ed10b0b5d5b636604b68dba1a265984ab42d15c4152be523d47a4be35eaf7e5e7658fcbc23d57adb39e23d3c7ede516abded1df0aaf83842afeb70889b23b5ad3dd88ed2b623c076b4b61d09b663b4ed28b01dab6d4783ed386d3b066cc76bdbb1603b41db8e03db89da763cd84ed2b613c076b2b69d08b653b4ed24b09daa6d2783ad4cdb4e019b6e728353c1769ab69581ed746deb00b633b4ed34b09da96da783ed2c6d3b036cd2fe9e0936395f3c4bdb54db7168112ca3edd26ea59791361b6ce7487b0db673a5ad065b2769a7c1761ef816dbf9d0d688adb3b649bba5fed747e753415cfb49b246adb722eef5866b56ebed1bff7ad3cf1cfb05755aa7c04f0568d55fe763ecd7d4057d17e9247ec45e0cf92ba1ac94133de4d823ecea1853a9f3fd1b58ae8fb15c2994a9b4d43f15c45bffbe064f5f83b915e4ddc46cd7ae3e661b3d651db383a1ac197b721ed41c637620703888d99e3e661b3d651db33550d68c3d39176e8e317b1b703888d92a37319b2cf7319bb96f1604f6d893eba1e618b3638023fe98edee63b6f153d631fb189435634fae899b63cc4e038ef863b667953f3768f49475cc2e80b266ecc9fd99e618b34f02878398adf1ed6ca3a7ac63f60d286bc69edc2b6c8e31fb2c70c41fb3bd1dc56c571fb341e6196810d8634fee5b37c7985d0c1cf1c7ec487f7fb6f153d631bb03ca9ab127cf509a63ccaed779f59ce127fa39c34960fba9b69d0cbcf1c776757747b19df4b19de91b1204f61895e779cd31b63fd07915c7bf80fe0862fba5b67500dbafb4ed34b07da66da743bd1cec03557e1f68f494f53ef01b286bc6b23c5b6e8efbc08f80c341cc56fb986df49475ccfe0dca9ab127fd1c9a63ccfe1e381cc46c8d8fd9464f59c7ec7f425933f6ced6f9e618b3d2d7549d2f7ca1cf17ce05db1fb4ad13d8bed4b6f3c0f6476d3b1f6c5f695b67b0fd49db2e00db9fb5ad1c6c7fd1b62e60fbabb625c1f6376deb0ab67fd1b66e60fb576deb0eb67fd3b61e60fbbbb6f504db3fb4ad17d8fea96dbdb54d3def92be5772deda06f85341bcdb56fa5dcaba65be4b0e7cb7337cb7cba1eff686eff616df4907be13e043a622633e05f9a45b9ef252e0415fdde2f7d555d5bd6bd0f8ba77039eee0eea9e001f8de1e90e3c3de2e749f7ffed19ff7ad3dbb8aba169027c75857af57250af22f025eb9679f1570a366c5b7b59187bc7cf982c025fb26e99ef0d8c62c3b65edeb992fd471d0f3b16d5f13ad897d2e744e24fbe5b261cddc02e65aee850c7d649b395c0fff1b8d7c3b0398acb745c882f59b7cc8bbf12a84f8fdc33261bcbd8dd6074d54614812f59b7f75db71d248fc77107d73ad6364d7c57e4c0776fc37737c337b69d3235746ceb0dccb15f73ea635b65fceb2dc7eb13b936143f78fe80d77071d5097dcbb5a1f8117b31e4af29aa2b2be5440f6987855dc5b26c4b643797eb652c570a652a2cf54f05f1d6bfd2e0a93498d536b9088e850ef687740c54181c32df0db4ab8cd0ae02b49332678376aedab33e068fccf7001e69c77a028fab6ba2289e5c5c8f1dc8379ec3e2f5b3fc1fcf035c6daf2e06a3ccdbb6576f60b49dab38b89e69f05ca53b308aad0ff07475a459d476ed4ae2db41aca4db23f121e7e6b2fff600bb94e9ad5fa8536de55dd056ba88118c47991a7bcd1bff764aa6afc1bb67c183dbcec175551747f1588ef76fbe0ee28d35b35dea6e6815758fc7555bded5e09179f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f199f2761bf2d29d78384d1ecffe6ea3e7ffafb877a5db27ef55ce7ff38ed0f962cc7fe31d20fe25ca3cec550a6b4455dd9ff0ffdc1cce754d847b2875bedd2db12fb63a6605efc615f2bdc960cfd9dca62f39d1ce9ea799bfa0698fa8ea6d9f7b387455317fd9f51d3224353ec8f7f9ec1a3e2b4b2651d9b8b677fd93e8b44ad241fe7b3bdd2c01eebf16f9764bd67d62d82faed071e675cf5df91b65a9e975718be8ba1cc892deab68df4ad923186bb1acb61bf1f59b72c732ed82b8d75b7d3cb0a472b63fd3d615929730ab4a97b5ad469e6a0ad4c66db771d9f9bc77f1cce3cc7ef9a054f17e071d1ce383adf28c77d20eee7f866ff34db798c94c1be7d0efa5536d8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb61b09638efa3ea49f67c8b7ca64fde9ef05b7a8f3ebfa399c3c73ea64d419df1dfd678bbab29b75be24d8bfbf43d4b674f57d8aa86d29fef0db33f82cc8c573dd22f025eb4e5ab4907c596cbe33cff15d8c0d21cff1bb1aba76b368ea6a7fc567aca829eeafdd0d1e7c361af56d9fa46173d977282a2ec41fee4b49b0491edf8f76b19df15862f6eb117ff8fcfa3b5adb7681ab6d9f2c77d96ee0775352c1fef18ddf53f921b47d3fd679ecc3817d47beb0fc5fa6869e538b7eaace0ebeaf595e04eb92ed6bfbb6e700608dc977175c57914e030c0d8a21ff798bbab2524eca8ad6c2aef611f9060cb29bcb7537962b8532fd2cf54f05f1d6dffcd66a7f83596d939f419c7d01c77f576d52bf088dce058da48ce36f365afb579afd0ab11d6d6d949165f15b747f85362aaaffa8ed18e0fa3826ebb61dc7cce34263fa79167a3fadff82f622ee7e5aff053184fdb40263fd9d60fdc2d53a883eb64899ff67acdf3c279765b01fd8ffec27f03d97a4ce67734e7eb0aeaf6ce7e4b85c54dd15337e072d152333c604b2e079829469abb5966d5619c1dddbb26c69c4b2a295f9adb092607ffddc7c672db3cff737ea22718ddf20973247425ddc9cb764ce015d7d532e057552f9a4a5ae52e638d8d74ed0f9046c27dc6fcfb1fc5fa686ce01710cf70be3af737afb5e049c29f083be2f06d6987c7741df720e287ec45e0cf9b35bd6959572a287682dec6a1f91f328643797ab30962b8532032cf54f05f1d6ff4283e74283596d939321cece817ee8aedaea01111a75028da40cde53b47d07d476afc3d5fb1b51e752f8fe92797e85c74937e74df6f358f3be9aed1ca193c18fe7083da19d4d58ca9af70be5781967bf617c57a227f8c577255c7dbbb90fe89682793c2f3898be5d7cc756f98b1a33a14f0e7c478d99900bdfed0ddfed73e8db6bee3567d2dcc11804e9f7cff09ba56a6ae8bc14c72590e55a00a38bb11c1241fd6f8f1f8811c77790e55a02a38be343b6df3eef098cb25c3130ba78b714c7df680c237e63188ff3c2e8e05bb15d9afaad58bca7d71a1899ded9c467538700a38bf3e2a6beab87e7f36de0d7d5b8445db3604c02a32c772830bab8378ed7328d61c4eb2259ae2d30ba788695edf84ef8ed79bcb7ec92b1a163bbe3be28c96cefbd54bae569f05c037d3b18d730ad05de673c90167dddf23478ee83be1ddcf74b6b81e30c1e480b7c36e862dcc34450ff39dc8178f0f9a52c770430a61c31f6cf8231058cff73af18180738624c65c1380018c57e14303ab8ff9a661c900523dea794e58e06c68b1c315e9805e345c028cb1d038c2eeea526c06f63182f064659ee5860bcc411e3c559305e028cb2dc71c078a923c64bb260bc141865b9e381f132478c9766c1781930ca722700e3e58e182fcb82f1726094e54e04c62b1c315e9e05e315c028cb9d048c573a62bc220bc62b8151963b1918af72c47865168c5701a32c770a305eed88f1aa2c18af064659ee54601ce888f1ea2c180702a32c57068cd738621c9805e335c028cb7500c66b1d315e9305e3b5c028cb9d068cd73962bc360bc6eb8051963b1d18af77c4785d168cd703a32c770630dee088f1fa2c186f004659ee4c60bcd111e30d5930de088cb2dc59c0789323c61bb360bc09186fb4300e72c47853168c838051963b0f186f8e9f317d2d3d280bc69b81e796f879d29add9c05cf2d6e79d2dfd5bbd9e2ebd6f87da5b7c5e0a0f175bf157886c4cf93de16b766c1230ca5b01c6a765bfc8c69cd8664c1781bf00c8d9f27add96d59f00c05cd6eb368767bfc8c69cd8666c1783bf00c8b9f27add9ed59f00c03cd6eb7687647fc8c69cd8665c17807f00c8f9f27add91d59f00c0fea34bbc3a2d988f819d39a0dcf827104f054c5cf93d66c44163c55a0d9088b6623e3674c6b569505e348e0a98e9f27add9c82c78aa41b39116cd46c5cf98d6ac3a0bc651c053133f4f5ab35159f0d48066a32c9add193f635ab39a2c18ef049ed1f1f3a435bb330b9ed1a0d99d16cdc6c4cf98d66c74168c6380e7aef879d29a8dc982e72ed06c8c45b3bb1d31de9505e3dd169eb8bf937d97c5d73847751f1b34beeec2500acb613f89f18e18c765c1381e186539ec2751eb88717c168cb5c028cb251c3336d44fa2167c4f88df77ba5daa0d1aafcf04b73c0df69340df131d69312168bc1613ddf234d84f027d4f72a4c5c4a0f15a4c029ec90eb448808fc6f00843292c87fd24a638629c9c05e3146094e5b09fc454478c53b2609c0a8cb21cf693b8c711e3d42c18ef0146590efb494c73c4784f168cd3805196c37e12f73a629c9605e3bdc028cb613f89fb1c31de9b05e37dc028cb613f89fb1d31de9705e3fdc028cb613f89071c31de9f05e303c028cb613f89071d313e9005e383c028cb613f89871c313e9805e343c028cb613f89871d313e9405e3c3c028cb613f89e98e181fce82713a30ca72d84fe211478cd3b3607c04186539ec27f1a823c647b2607c141865b9bb1d333674fdf26833f71d75add2dc7d475d973477df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f771cee4fb3107be13e043a622633e0579612885e5eef68ccd9a1179cae2e329c7baa3afc709eafeb885a7c851ddd1d713047517867c637c2c0f18711ff73a369dd1b18ec9a6322a9e271df13c9105cf93c0f394239e27b3e0790a789e8e9f271d534f65c1230ca5b0dcdd79c0f8581e307a1dbd8e4c8c5ec7c2d1d1337a46cfe8190f06633eb4e19e312fe231d95446c533237e9eb4664f67c133033493e56e71cb986c2aa3e299193f4f5ab31959f0cc04cd66583473c0986c2aa3e299153f4f5ab39959f0cc02cd665a3473c0986c2aa3e2991d3f4f5ab35959f0cc06cd66593473c0986c2aa3e299133f4f5ab3d959f0cc01cd665b3473c0986c2aa3e2991b3f4f5ab33959f0cc05cde6583473c0986c2aa3e299173f4f5ab3b959f0cc03cde65a3473c0986c2aa3e2991f3f4f5ab37959f0cc07cde6593473c0986c2aa3e259103f4f5ab3f959f02c00cde65b346365bc3b0f181fcb0346c73a269bcaa878163ae2599005cf42e079c611cfc22c789e019e67e3e749c7d43359f00843292c77771e303e96078c5e47af2313a3d7b17074f48c9ed13366c7f8781e30fa6ded1959191d5c5f35f80ecd33cddc77d43b34cddd77d43b34cdddb78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c33f97e2e7edfc96cbf31f31cf0b8f8e68da37a96abf53eafd7f5758cfa29ad5e30b47ac6d0aa14ca3c0ffabde040bf22f02beb9679f1972d7347026647be938785eb3814ea2f3e1e33f450fe5f7454f7a8b6fec566ee3baaad6feebea3dafae6eedbc7b98ff342f0ede3dcc77921f8f671eee39cc537e65b0575e7edf2fd53b58e9774be58cf4bf9c7c12e65261f92f96d17f87dc8856fbf0ff9634521f8f671eee3bc107cfb38f7715e08be7d9cfb382f04df3ece7d9c17826f1fe73ece0bc1b78f731fe785e0dbc7395f9c633c54e6802730788206781690f14c25e3994dc6339a8c672819cfb5643c1791f13c48c6d38d8c670219cf48329e9bc978ae24e3b9808ca71f19cf34329ede643c73c878ee22e3798a8c671819cff5643c9790f13c4cc69324e39944c6338a8ce756329eabc97852643cf791f1f424e339878c671c19cf5c329eb3c9788693f13c4dc6732319cf61643cedc8782e23e379828ce77c329e0a329e47c878e693f14c21e3b9938ce736329e72329e6bc8783a93f15c48c6f300194f77329e79643cb5643c33c878aac8780691f19c4bc67305194f4b329ebe643c0bc978ee21e3e943c633868ca71319cfed643cd791f15c4cc6f310194f57329e89643c33c978aac9780693f15c45c6d39f8ce75e329e5e643c63c9783a92f1dc41c67303194f2ebe679a0d4f09194f2919cfa5643c8f92f14c27e3e942c633998c6716194f0d19cf10329e81643c03c878ee27e3e941c6339e8c670419cf4d643c4f92f11c4ec6d39e8ce772329e22029e44b0ff182609f8ff73606b612cab3efb3aa743ddff5fd6f616b0cc2b3adfd2b2ee97c126df927dc5b22ceaf432d425a5f3e5df6c4aeb84be52302ffe4a80e315129ecbc978da93f11c4ec6f32419cf4d643c23c878c693f1f420e3b99f8c670019cf40329e21643c35643cb3c8782693f17421e3994ec6f32819cfa5643ca5643c25643ccf91f1dc40c67307194f47329eb1643cbdc878ee25e3e94fc6731519cf60329e6a329e99643c13c978ba92f13c44c6733119cf75643cb793f17422e31943c6d3878ce71e329e85643c7dc9785a92f15c41c6732e19cf20329e2a329e19643cb5643cf3c878ba93f13c40c67321194f67329e6bc878cac9786e23e3b9938c670a19cf7c329e47c8782ac878ce27e379828ce732329e76643c8791f1dc48c6f33419cf70329eb3c978e692f18c23e339878ca72719cf7d643c29329eabc9786e25e31945c633898c2749c6f33019cf25643cd793f10c23e3798a8ce72e329e39643cbdc978a691f1f423e3b9808ce74a329e9bc9784692f14c20e3e946c6f32019cf45643cd792f10c25e3194dc6339b8c672a19cf02329e4a0bcf738e78e47d7759b7cc3f47e2dbc1762857eb7dd5519d5ed3eb6aa5d72bfce2af18ca4c6f9bf955cf3f7059e132bf4f80efe6bc061abde6a82eb23d8a8ced83be5f72e4db1c9f4fe65f6ae6bedb19bedb1588eff686eff605e2dbc7b98ff342f0ede3dcc77921f8f671eee39cc9b7836b83247e274da622633e0579bc5e70f17d3947f5ac779df8758cfa29ad5e37b432afad4aa1ccaba0dfeb0ef4b35d7bcabcf8cb96b9230133c64559106f5cbc117f9d92aadfe1a1a0eb1b86be58af458e348d3a862c6ae6bea38e21cddd77d431a4b9fbf671eee3bc107cfb38f7715e08be7d9cfb3867f2fda6cec778dd588e3ed4f345b91e7813fc2ed1f9a218fdaa752dd6eb2ad6eb168e25609732ff1b9e6bfa7ddeeff371f9f6c7361fe785e0dbc7b98ff342f0ede3dcc77921f8f671eee3bc107cfb38f7715e08be99e3dccc4b7ff1b381cd557ffea858ccc5bb0407d377542c3677df51b1d8dc7dfb38f771cee47ba903df09f02153437dfc9602cf62073c8eea997eb6b1cca8d373469d4aa10c1ee39739a86711f89575cbfc32e091a912785cc44163b639f22c20e3994ac6339b8c673419cf50329e6bc9782e22e379908ca71b19cf04329e91643c3793f15c49c67301194f3f329e69643cbdc978e690f1dc45c6f31419cf30329eebc9782e21e379988c2749c633898c671419cfad643c5793f1a4c878ee23e3e949c6730e19cf38329eb9643cc3c9789e26e3b9918ce730329e76643c9791f13c41c6733e194f0519cf23643cf3c978a690f1dc49c6731b194f3919cf22329e6bc8783a93f15c48c6f300194f77329e79643cb5643c33c878aac8780691f19c4bc67305194f4b329ebe643c0bc978ee21e3e943c633868ca71319cfed643cd791f15c4cc6f310194f57329e89643c33c978aac9780693f1bc4ec67315194f7f329e7bc9787a91f18c25e3e948c6730719cf0d643c25643ca5643c9792f13c4ac6339d8ca70b19cf64329e59643c35643c43c8780692f10c20e3b99f8ca70719cf78329e11643c3791f13c49c67338194f7b329ecbc9788a087812c1feeffe27e0ffaf834dde517f0e6c6fe9fc62b0b5b0f868a9f3cbc056acf3b28e43c2f46287fdd78d3ab97a2f1f7da5605efc9500c75b243c9793f1b427e3399c8ce749329e9bc8784690f18c27e3e941c6733f19cf00329e81643c43c8786ac8786691f14c26e3e942c6339d8ce751329e4bc9784ac9784ac8786e20e3b9838ca72319cf58329e5e643cf792f1f427e3b98a8ce775329ec1643cd5643c33c9782692f17425e379888ce762329eebc8786e27e3e944c633868ca70f19cf3d643c0bc978fa92f1b424e3b9828ce75c329e41643c55643c33c8786ac978e691f17427e379808ce742329ece643cd790f12c22e32927e3b98d8ce74e329e29643cf3c9781e21e3a920e3399f8ce709329ecbc878da91f11c46c6732319cfd3643cc3c978e692f18c23e339878ca72719cf7d643c29329eabc9786e25e31945c633898c2749c6f33019cf25643cd793f10c23e3798a8ce72e329e39643cbdc978a691f1f423e3b9808ce74a329e9bc9784692f14c20e3e946c6f32019cf45643cd792f10c25e3194dc6339b8c672a19cf02329ecadcf024d5bbedd2d73a002e9c52905f063c8b1ce8e3a89ee5f85d83af635cafd2ea6d43abd70dad4aa1cc52d0ef6d07fa15815f59b7cc8bbf7c64563c8feabced3b108f92308a6d915b9ef47efb68507f6a68bf7d1b785cb46b8eea99debf961b757ad4a2bb94c1585deea09eb67d47e697c376c83766c5f384ce0b6b02ca3d41c228b6656e79d2fbd71341fda9a1fd6b39f0b8687f1cd533bd7fad30eaf48445772983b1bac2413d6dfb8eccaf80ed906fcc8ae7499d17d604947b9284516c6fbbe5e996803acbd4d0feb502785cb43f8eea99debf561a757ad2a2bb94c1585de9a09eb67d47e657c276f0cc9ed9c6ac78e4d98eb026a0dc53248c625bee94a75b7902ea2c5343edd84ae071d1ce3bd23ddd8ead32eaf49445772983b1baca413d6dfb8eccafb2f82e0be2d5627523b4586de1599d632dc45fb6cc4bf390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398a994167c523dfae14d604947b9a84516c2bdcf2a4df0b7a3aa83f1519f329c8af069e950ef47154cf741ff235469d9eb6e82e6570ff5ae3a09eb67d47e6d7c076c88679551e327b9d9bc6ac7866e8bcb026a0dc0c1246b1ad74cb936ec76604f5a786dab135c0e3a29d7754cf743bb6d6a8d30c8bee5206f7afb50eea69db77647e2d6c07cfec996dcc8a67a6ce0b6b02cacd246114db6aa73cc9f4fb8d3383fa5343edd85ae071d1ce3bd23ddd8ead33ea34d3a2bb94c1585de7a09eb67d47e6d7c176c88679551e327b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5ee7c2d159f1ccd279614d40b959248c625be394a76bfab9c3aca0fed4d0738775c0b336769ecc730707baa79f3bac37ea34cba2bb94c1fd6bbd837adaf61d995f0fdba1b933afca43661f1bb961f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e6286686d8503cb3755e5813506e3609a3d8d6bae5497ff76076507f6aa8dfce7ae059e7401f47f54cf7dbd960d469b645772983fbd70607f5b4ed3b32bf01b68367f6cc3666c53347e7853501e5e690308a6d9d5b9e743b3627a83f35d48e6d001e17edbca37aa6dbb18d469de65874973218ab1b1dd4d3b6efc8fc46d80e9ed933db9815cf5c9d17d604949b4bc228b6f56e79d2edd8dca0fed4503bb611785cb4f38eea996ec73619759a6bd15dca60ac6e72504fdbbe23f39b603b7866cf6c63563cf3745e5813506e1e09a3d836b8e54926a0ce3235d48e6d021e17edbca37aa6dbb1cd469de65974973218ab9b1dd4d3b6efc8fc66d80ef9c6ac78e6ebbcb026a0dc7c1246b16d74cb93debfe607f5a786f6afcdc0e3a2fd7154cff4fef58e51a7f916dda50cc6ea3b0eea69db7764fe1dd80ef9c6ac7816e8bcb026a0dc021246b16d72cb93debf1604f5a786f6af7780c745fbe3a89ee9fd6b8b51a70516dda50cc6ea1607f5b4ed3b32bf05b643be312b9e853a2fac0928b79084516c78bc58e888a7d4e029b56871b07cabf90a9d2fd1bf09f87f0530ba6a0f171a8c328f318ebcae356b67f0b433343b98be55fd2b75fe30fd8bdbab121819b657bb1c68d6dee0696f6876307d2b2dfaeafce1fa17b7575f6064d85eed81c741fbdc2d61f0a8a9a1f38d2d8ef57154cff4f9c6d6c0ae3b1e87a40c1ebbb73aa8a7ed5c42e6b7c276f0cc9ed9c6ac7806e9bcb026a0dc201246b1e175cab6f879ba250c1e3535d48e6d73ac8fa37aa6dbb17703bbeedb40772983b1faae837a16815f59b7ccbf0bdb211be65579c8ec756e1ab3e219acf3c29a8072834918c5b61578b6c7cfd32d61f0a8a9a1766cbb637d1cd533dd8eed08ecba6f07dda50cee5f3b1cd4b308fccaba657e076c876c9857e521b3d7b969cc8a6788ce0b6b02ca0d216114dbbbc0b333769ecc7840c8a3a686dab19d8ef57153cf4c3bf65e60d77d27e82e6570ff7acf413d8bc0afac5be6df83ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd579614d40b9a1248c62db013cefc7ce9379ee803c6a6ae8b9c3fb8ef57153cfcc73875d815df7f741772983b1bacb413d8bc0afac5be677c176f0cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfcccdac7886e9bcb026a0dc301246b1bd073c1fc4cfd32d61f0a8a9a1e70e1f38d6c7513dd3cf1d760776dd3f00dda50cc6ea6e07f52c02bfb26e99df0ddb61b767f6cc1666c5335ce7853501e58693308a6d17f0ec899d27f3fc1479d4d4503bb6c7b13e6eea9969c7f60676ddf780ee52066375af837a16815f59b7ccef85ed900df3aa3c64f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce85a3b3e2a9d279614d40b92a1246b1ed069e0f63e7e95a9e3078d45464cca720ffa1637ddcd433f3dc615f60d7fd43d05dcae0feb5cf413d8bc0afac5be6f7c17668eeccabf290d9c7466e987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398a992136144fb5ce0b6b02ca5593308a6d2ff07c143f4fb784c1a3a622633e05f98f1cebe3a89ee97e3b1f0776dd3f02dda50cee5f1f3ba86711f89575cbfcc7b01d3cb367b6312b9e1a9d17d60494ab216114db3ee0f9247e9e64c2e0515343edd8278ef57154cf743bf66960d7fd13d05dca60ac7eeaa09e45e057d62df39fc276c83766c5335ae7853501e54693308aed63e0711077699e528347e63f21f0ade66b75be44ffe2f6aa054686ed559a03cdda193ced0ccd0ea66f55ff093a7f98fec5ed35011819b657bb1c68d6dee0696f6876307d2b2d26eafce1fa17b7d7446064d85eed73a0d9c16c0f0fe6be7d30e3d46b7ef0342f3a889a171d44cd8bbce6549a3b38be24f1581600034e29c87f0a3cdf8e9f277d5feed32c78be0d3cdf8a9fa78ba37a96abf57e07d8e35aafd2eabb86569f1a5a95421964f8ae03fd8ac0afac5be6c59f67f6cc51cc786e2bac0928f70909a3d8be053c2eda0d55f7f3f5ba64fdadc2f4d951757e5d3c2fc17bc5adf47a8543fc154399896575657fa7d94ae0ffb2dd547df6193647ef3077b13db79379f15712e4ecde6d83f792510b17cf9bb23deeefb3f07c1d1f4f39eee7e86bafa3ba67f3ec6faf8527c6ba77897aeeb927febaa7db8fce7a5db27eb58ffefb514e35ef86fb9eb41f9d8d3a17439981657565ff03da0f5b5be17adf94737273df6c11d4b567c255a6ede633a1afb55dca7d04e5b1cda9d0bfb87f56405d5db58b51f798b05d34db6e97da9bcf254ddfa5a0cb47a49ad99e53a08e9516ee4a026e8cc75cee67b26edb33b24a434736cd705b7f64d1b1af85bb2f0137e37eddd7d0914db303edd7832cdc8308b819f7eb41868e6c9a1d68bf1e6ce11e4cc0cdb85f0f367464d3ec40fbf5100bf710026ec6fd7a88a1239b6607daaf875ab887127033eed7430d1dd9343bd07e3dccc23d8c809b71bf1e66e8c8a6d981f6ebe116eee104dc8cfbf5f0a0be8e6c9a1d68bfaeb27057117033eed755868e6c9a1d68bfaeb67057137033eed7d5868e6c9a1d68bfaeb170d7107033eed735868e6c9a1d68bf1e6de11e4dc0cdb85f37b6df3eeb7e5d6be1ae25e066dcaf6b0d1dd9343bd07e3dc1c23d81809b71bf9e60e8c8a6d981f6eb8916ee8904dc8cfbf544434736cd6cfbb5a37709b37eb7f163a7fa64c698fe380b9e0f81c7454c398a837247fd5cd27d53f7185a7d6c68856377ec05fd1cf48569f09b04e2cf337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d333f337e97119faf48b98f4818c586cfa45cdce75775bf40af4bd6df2a4c038fa9f3bb3776bfc9f222c35f0a38c45f319439e1d4bab2d76bb69260ffed866371e3b6dc1d7b1d32dbd28c7f99177f25509f3dc0e3e0fdfc34cf5e8367af450b7cef341edfc9916e344e96abefe31d1ad46de7dd467d50d30f62f75f5fd32243d30f1cfb4e04f5b7a730e094823cf2b87836eca89ee9b66097512753e35228d311eab9cb413d8bc0afac5be677018f4c2d80c7550c06064f60d147a64a329ea9643ca3c978ce20e3194ac6731c19cfb5643c8792f15c44c6f320194f37329e09643c23c9784e25e3b9998ce748329e2bc9782e20e32926e3e947c6338d8ca73719cf5d643c6791f10c23e3398f8ce704329eebc97812643c9790f13c4cc69324e39944c6338a8ca70319cfad643c4793f15c4dc6d39a8c2745c6731f194f4f329e73c878c691f19c4dc6339c8ce724329e1bc9780e23e36947c6731919cf23643c15643ce793f14c21e3b9938ce774329edbc878cac9788e25e3b9868ca73319cf85643c6dc8781e20e3e94ec6534bc65345c6730a19cf20329e73c9788e20e3b9828ca725194f5f329e7bc878fa90f18c21e3e944c6732619cfed643cc793f15c47c6d3968ce762329e3d643c0f91f17425e39948c6534dc6b38f8ca78c8c673019cf51643c5791f1b422e3e94fc6732f194f2f329eb1643c1dc978ee20e339918ce706329e12329e52329e4bc978a693f17421e3994cc65343c6731a19cf10329e63c8780692f11c42c633808ce77e329e1e643ce3c9784690f19c4cc6731319cfe1643cedc9782e27e32922e04904fb7f8b2901ffdf0b36f966d087606b61599f3ca796f2eab8b8b8c3feeb6e6159f7071606d4e97da84b4ae7cbbfd994d6097da5605efc9500c707243c9793f1b427e3399c8ce726329e93c9784690f18c27e3e941c6733f19cf00329e43c8780692f11c43c633848ce734329e1a329ec9643c5dc878a693f15c4ac6534ac65342c6730319cf89643c7790f17424e3194bc6d38b8ce75e329efe643cadc878ae22e3398a8c6730194f1919cf3e329e6a329e89643c5dc9781e22e3d943c67331194f5b329eebc8788e27e3b99d8ce74c329e4e643c63c878fa90f1dc43c6d3978ca72519cf15643c4790f19c4bc633888ce714329e2a329e5a329eee643c0f90f1b421e3b9908ca73319cf35643cc792f19493f1dc46c6733a19cf9d643c53c878ce27e3a920e379848ce732329e76643c8791f1dc48c6731219cf70329eb3c978c691f19c43c6d3938ce73e329e14194f6b329eabc9788e26e3b9958ca70319cf28329e49643c49329e87c9782e21e34990f15c4fc6730219cf79643cc3c878ce22e3b98b8ca73719cf34329e7e643cc5643c1790f15c49c6732419cfcd643ca792f18c24e39940c6d38d8ce741329e8bc8780e25e3b9968ce738329ea1643c6790f18c26e3994ac65349c6d3c2e0c1ffab77c3f6e8bc7c3ba818fe3f49772e6fa7d72565e419b1ba57f19e6153f5dde9a8beef0575530ae677427d85fd3de079cf11cffb068fe9bb04f295a0d90ec3a618b73b62dc6130cafc766014fd7600cf0e473c3b0d1ed37709e4fb8266ef1a36c5b8cd11e3bb06a3cc6f0346d1ef5de079d711cf7683c7f45d02f941a0d956c3a618b73862dc6a30cafc166014fdb602cf56473cdb0c1ed37709e4078366ef1836c5b8d911e33b06a3cc6f0646d1ef1de079c711cf1683c7f45d02f921a0d926c3a618373a62dc6430cafc466014fd3601cf26473c9b0d1ed37709e48782661b0c9b625cef887183c128f3eb8151f4db003c1b1cf16c34784cdf25901f069aad336c8a71ad23c67506a3ccaf0546d16f1df0ac73c4b3dee0317d97407e3868b6c6b029c6d58e18d7188c32bf1a1845bf35c0b3c611cf5a83c7f45d02f92ad06c9561538c2b1d31ae3218657e25308a7eab806795239ed5068fe9bb04f2d5a0d90ac3a618973b625c6130cafc726014fd5600cf0a473c2b0d1ed37709e46b40b3b70d9b627ccb11e3db06a3ccbf058ca2dfdbc0f3b6239ee5068fe9bb04f2a341b365864d312e75c4b8cc6094f9a5c028fa2d039e658e78de32784cdf2590af05cd961836c5b8d811e3128351e61703a3e8b704789638e2596af098be4b203f01347bd3b029c6458e18df3418657e11308a7e6f02cf9b8e78161b3ca6ef12c84f04cdde306c8af175478c6f188c32ff3a308a7e6f00cf1b8e7816193ca6ef12c8df0836e1ed03b6d774be37d85ed5f95e607b45e77b82ed659def01b69774be3bd85ed4f96e607b41e7bb82ed799d4f82ed399def02b66775be1fd89ed1f9fe605ba8f329b02dd0f901609baff317826d9ece5f04b6b93a7f31d8e6e8fc25609badf397826d96ce5f06b6993a7f39d866e8fc15607b5ae7af04db533a7f15d89ed4f9abc1f684ce0f04dbe33a7f0dd81ed3f96bc1f6a8ce5f07b6bb75fe7ab0dda2f33780ed639dbf096c9fe8fccd60fb54e76f05dbb774fe36b07d5be76f07db7774fe0eb07d57e74780ed7b3a3f126cdfd7f95160fb81cedf09b61feafc18b0fd48e7ef02db8f757e2cd87ea2f3e3c0f6539d1f0fb69fe9fc24b0fd5ce72783ed173a3f056cbfd4f9a960fb95cedf03b6cf747e1ad87eadf3f782ed373a7f1fd87eabf3f783ed773aff00d87eaff30f82ed739d7f086c5fe8fcc360fb83ce4f07db973aff08d8fea8f3d2aea976f64f3a5f16c4dbce7e15d44d65e05bfca9327fd6f9d6461959b618ca9ca53b14aa671cea5ba6d20e4bbbac6cd20ebf063669875f059bb4c3af804ddae197c126edf04b609376f845b0493bfc02d8a41d7e1e6cd20e3f073669879f059bb4c3cf802da5f30bc126edf002b0493b3c1f6cd20ecf039bb4c373c126edf01cb0493b3c1b6cd20ecf029bb4c333c126edf00cb0493bfc34d8a41d7e0a6cd20e3f093669879f009bb4c38f834ddae1c7c026edf0a3609376f86eb0493b7c0bd8647ff90a6cd2367f0c36699b3f019bb4cd9f824ddae66f814ddae66f834ddae6ef804ddae6ef824ddae6ef814ddae6ef834ddae61f804ddae61f824ddae61f814ddae61f836d9cceff046cd236ff146cd236ff0c6cd236ff1c6cd236ff026cd236ff126cd236ff0a6cd2367f0636699b7f0d36699b7f0336699b7f0b36699b7f0736699b7f0f36699b3f079bb4cd5f804ddae63f80ed119d97b6ba0dd8e459b19acabfe184e3f0b4005fc2920ae26dfb714a411eeb2e532519cf1c329ed1643c2f91f19c41c633948ce738329e43c978de20e39940c6b3908c671919cf52329ed7c9784e25e3d940c6b39e8ce748329ef7c8787692f15c40c6534cc6338b8ce705329eb3c8788691f19c47c67302194f828c673e19cf12329ec5643caf92f17420e35947c6b3968ce768329e1d643cdbc9785a93f17c45c633838ce71c329ee7c878ce26e3194ec6731219cf61643cedc8782ac878ce27e3994bc6f32619cf22329e97c9784e27e35943c6b39a8ca79c8ce758329e77c978b691f17426e36943c6f314194f2d19cf33643c55643ca790f10c22e339978ce708329e96643c7dc9786e21e3994dc6f322194f27329e33c9785691f1ac24e3f9928ce778329ead643c5bc878da92f1ec21e39948c6b3808ca79a8ce735329e7d643c65643c83c9788e22e36945c6f33119cf4c329ee7c9785690f12c27e339918ce71d329ecd643c25643ca5643cf3c8786ac8785e21e3398d8c670819cf31643c8790f13c4dc6f32c19cfdb643c6f91f19c4cc6b3898c672319cfe1643cedc9787691f1bc4fc65344c093008e006cf2ff966093eff0ec03db173abf076cf20d9f37c0f6b9ce3f02b6872cb616163e61980e367957f60bb0c9fd9987c126ef4c7c0e36396f10ff6a7e6587fdf95bc032e2a7a5851ffd7d6ee1923c6e6f592615c4bbbdd1572ab07ff3aec8603cd83cef93f1ec22e3694fc6733819cf46329e4d643c2793f1bc45c6f33619cfb3643c4f93f11c42c6730c19cf10329ed3c8785e21e3a921e39947c6534ac65342c6b3998ce71d329e13c9789693f1ac20e3799e8c672619cfc7643cadc8788e22e3194cc65346c6b38f8ce735329e6a329e05643c13c978f690f1b425e3d942c6b3958ce778329e2fc9785692f1ac22e339938ca71319cf8b643cb3c9786e21e3e94bc6d3928ce708329e73c9780691f19c42c65345c6f30c194f2d19cf53643c6dc8783a93f16c23e379978ce758329e72329ed5643c6bc8784e27e379998c671119cf9b643c73c978ce27e3a920e36947c6731819cf49643cc3c978ce26e3798e8ce71c329e19643c5f91f1b426e3d94ec6b3838ce768329eb5643cebc8783a90f1bc4ac6b3988c670919cf7c329e0419cf09643ce791f10c23e3398b8ce705329e59643cc5643c1790f1ec24e3798f8ce748329ef5643c1bc8784e25e3799d8c672919cf32329e85643c13c878de20e339948ce738329ea1643c6790f1bc44c6339a8c670e194f25194f0b0bcf3e473cf2ad1859b7ccef6be6be771abe771688efed86efed05e27b9be17b5b81f8de62f8de5220be371bbe371788ef8d86ef8d05e27bbde17b7d81f85e6bf85e5b20be571bbe571788ef9586ef9505e27bb9e17b7981f87ecbf0fd5681f85e6af85e5a20be171bbe171788ef4586ef4505e29bf9fa5b7d274cfa2aefd2bf09f87f0530bee188719fc128f36f00a3d8f07bd4158e78a2aedd2b087c2b2de45e963cf34cc0ff2b81d1554c55188c326f8ba99dc053e98827ea9e4325816fa585bc8b2d7d2a13f07f1c7fd9554c551a8c326f8ba9edc0d3d7114fd4bd92be04be9516f2eeb3bcf39780ffe378ebae62aaafc128f3b698da063c831cf144dde31944e05b6921df0a936fd224e0ff383ea3ab981a6430cabc2da670fcdcc18e78a2ee4d0d26f0adb4906fedca372f13f07f1cbfc9554c0d361865de1653387edc10473c51f7d48610f8565ac8b360f9467b02fe3f14185dc5d4108351e66d3185e3dd0c75c413752f7028816fa5c5309d973e5609f8ff3060741553430d4699b7c5d47ae019e68827ea1ee63002df4a8be13a2fef7024e0ffc381d1554c0d331865de16536b8167b8239ea87bafc3097c2b2daa747e8dfe4dc0ffab80d1554c0d371865de1653ab81a7ca114fd43de32a02df4a8b6a9d976fce25e0ff38fefb70478c5506a3cc0f0746b1ad049e6a473c51f7baab097c2b2de4dbfe2bf46f02fe8fe3b1ba8aa96a8351e66d3185e341d738e289ba475f43e05b69315ae7654c9804fc7f3430ba8aa91a8351e66d3185e3578e76c413f56c6134816fa5857c9b6b99fe4dc0ff6b81d1554c8d361865de16534b81a7d611cf628367b1458b83e55b69217db997e8df04fc7f0230ba8aa95a8351e66d31b518782638e2897a963381c0b7d242beadfda6fe4dc0ff2702a3ab989a6030cabc2da61601cf44473c51cfa026e6c077d4f3945cf88e7a36900bdf51f7b973e13bea9e6d2e7c47dd7fcc85efa87b69b9f01d755f2817bea3ee71e4c277d4f57a2e7c475d7be6c277d475542e7c475d13e4c277d4f96d2e7c479dabe5c277d479876fcf7d7b1eb7ef8379ee50a8edf9c13c861ecc6389bf36f0d706b9f2ed8f25feda2057be0bf5dac0b7e7b96fcfe5faab2888be1e7bcb91efa5866f99c7e72c4b1df95e6cf896797c66b0d891ef45866f99c7fbdf8b1cf92e357ccbfca21cf86e67f86e9743dfed0ddfed2dbe1d6cef6422a87ffd2d0c38a5208f31f0a6032d1cd5b35cad77895ed7d731aed776dfc6dc5f4aa1cc12d0cf75db21eb36db8e7c64c6b8288acf7779027cc877c9944d9e1fbf063669f75f059bf40b78056c726c7a196cf24cea25b0c933ab17c1365ae73f069b3c3bc63efbf2fc7f1bd8aa741efb8a0fd7f92d6093be54d84759fac36d069bf469c4beb1d22f7523d8a46f31f6c994fee1ebc1267dfcb12fa0bca7b1166cf2ae0df64193f7a556836d8fce63df27f90ecd4ab04dd7f91560fb83ce2f07db833a7f0bd87eaff35f81ed773abf086c0fe8fc9b60fbadce2f01dbfd3aff02d87ea3f3cf83ed3e9d7f0e6cf7ea3cbecbf66b9d7f1f6c9fe93cbe43354de77782ed573a8fefeedca3f3dbc1f64b9d7f166c5375fe19b04dd1f98560fb85ce2f00dbcf757e3ed826ebfc3cb0fd4ce7e7826d92cecf01db4f757e36d8c6ebfc2cb0fd44e767826d9ccecf00db589d7f1a6c3fd6f9a7c0f6239dff126c77e9fc62b0b5d0f9a560933123b19f4ab1cebf05b6563a8ffd8fe4fbfe13c17688ce4f005b1b9daf059b7c1b6e34d8643ce81ab02574be1a6c253a5f0536393f1b0e3619ff6418d8e45c6a28d80ed7f9216093f39ec16093f12c07814dbe41da176c47e97c25d8e4dbfa15603b46e7f7814dc61c7b036cf2ddba3d6093b1981f069b7caf7a3ad84ed4f93f804dc66179106c27ebfcefc1768aceff0e6cf20dcf07c056a6f3bf055b079dbf1f6ca7e9fc6fc0266364dd07b63374fe5eb0c9d8c1bf069b7ceff933b075d4f969603b5be77f0536194be41eb0c9f8a0bf045b279d9f0a36f90ef714b09daff3bf009b8cf7f773b0c9378627834dc675fb19d8bae8fc24b02575fea760ebaaf3e3c1d64de77f02b6ee3a3f0e6c3d747e2cd87aeafc8fc1d64be77f04b6de3a2fed8cda9fd57ebe57cfa782f8cecb94bf0f83fa5343d706c2803c719e6b97020ffada1d7bdd93e9f37ad9ef5be8f54a0ced06dfbb62f79db9a6f840afab58af7797e1bb18ca9cad1b07b59c1cf35beae5f618cbe17d2c59b72c7301d8df37d6dd4ed7f70347f5dd65300937ea2065ced34cead8f8039d6f03cbc4c896be3e96580b40439c52901706375a25cbf1bcb7313c1f00cfeed87932d7eb2e6202f7adb8afd7cdfbb866ac9542995da0dffb0ef4c37d5dd62df3e2cf337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d333fb3e2d9abf3f85c59caed256114db6ee071719f1f9fc3cafad5739df74fadf3bb3b76bff59fefb5d2eb2d37ea5c0c65be86674e7b74be04fe2fdb2d6a5b3a784ed8e0b6147f25501f7c16b4d711cf6e8367b7450bc997c5e63b39d28dc6c972d597453d63df63e8bad7a2a9abfd75b75e5791a129eeaf1f1a3cf86cb404783fd2bf0958cf47500707fb78837121fe705fda0d36c97f088c2eb6331e4ba43d90e7e1f86c5acafcca782e1effb64f96bb6c37de833aa582fde3bb18cafc0edabecf751efb86ec05ddfe61f9bf4c0d3da716fd549d77c45fe7f4f6dd0e9c29f083bedf05d6987cd77b87a64827f123f662c8ff1dfa734839d143b416761caf1cd9cde53e34962b85323b2df54f05f1d67f87c1b3c36056dbe44b88b37fc0f1df559bb43342a30b402329b31b34dae38867b7c1231ce24f9591eddfda2823cb164399ff056d94aa8bb4f3524fecdb82c70057c731f125eb9679dbb9f107c068d651c5c7c063ea7877c7ce9b5ffdbf0e29cbfc62bb1e57ff2f59773bbdac7004c6facb61fdc2d53a883eb6fccff62dab5bbfcbfe657b8c3a0b0bea2c65da95657e559c5daaf3d99ceb1facebb6a873fd9d0e781241fd6b6f3535747cc763cc7bf07f2953fecda62e8eea596e3b76bd6fd4a914ca74847a3a388f69f05de01de0dbc536472de41c6a97a1453194e95096f995b6234a47bc56fd202775495acf07cb2d7591321dcbeaead206ec7132b9dc6eef429dd47a775bea2a65ce2babd3a5b3ce27603be17d93be96ffcbd4507b8063f16c8dbfcee9edbb053853e0077dbf03ac31f9aef72d1039df173f622f867c65595d5929277a88d6c2aef61179e70fd9cde57619cb9542996d96faa78278ebbfd5e0d96a30ab6dd2a5ac2e2f71e4b2dddc16a15139682465f0feb11cdbf1bd3bdb717fb723eea8e3fe6e6034db4d3c7771c9b6c76033efa1dace07a50c9e934999abca32bfaa9d4d58ca9af7865ddcc7c4775003a84760d455268c0107d786ddf0da49da29f1d319ecbb755e74ee6c68570c650695657e1d9e775bef5d9ad777784d21dce6be85ef7e0c29abe3c6b11377ebdf12b07da27f1d5da775b3dd33140edb3dc3e16575ecb8ac707d6ca98b798ddc22d8ff9efad74659bcefd6d07266de1c8752e9fb8951cee607af79627b57a34b793932b508ecf70b3e34d88b82fdc7dc94fd0063cebc8fd2d9580fde47a92dcbfc4a9b649655dbfedf8faad347b6a36887ed09c6e487c098d2f9f26f3675b1d55fe6c59f62fcc8a8839bb62bf3be5236f781f7008f8bb6dd511b5d8ec7d836b1adb77795edf8ffa1a1550e9fd75a8ff9e633f736463e1edfc96adbfd279b16bb2c3cae9ea34469b1cbe23b3e2d7a8cb41d3f6c5ae4b2ef439416ef5b7cc7a8450ddef76c488bf72c3c2eee4535a4c57b16dff169d1b3bca1e71aa8c54e0b8fab7b0f515a88bf6c99df27606e63e4e3f1ddadca769fcca6c50e0b8fabebe6282d76587cc7a745971e788fae212db65b78e2bf3fd7b016db2dbee3d3a2576fbc87d79016ef5a785c3dd38dd2e25d8bef18e36294ed5e8e4d8b6d169e6d39d6629bc5778ce7873d6cf7da6c5a6cb5f038b8efdaa0165b2dbe63d46204de776d488b2d169e2d39d6628bc5777c5a5475b7dd13b669f18e85c7d53de1282ddeb1f88e4f8b11bd94efcd8dd062b38567738eb5d86cf11de335543a2e3635428b4d169e4d39d66293c5777c5a54a7cfb53636428b8d169e8d39d662a3c5777c5a94a78fa91b1aa1c5060bcf861c6bb1c1e23bc6b8485f4fae6f8416eb2d3ceb73acc57a8bef188f23e9b858d7082dd65978d6e5588b7516dff1695193beffb4b6115aacb5f0accdb1166b2dbe63bce7928e8b358dd0628d85674d8eb55863f11d9f165dd3c7d4d58dd062b58567758eb5586df11d9f16a3d2cfc45635428b55169e5539d66295c5778ce79de9f6626523b45869e15999632d565a7cc778de99be7fb1a2115aacb0f0acc8b1162b2cbe636c3bd3e79dcb1ba1c5720bcff21c6bb1dce23bc6f3ceb4166f37428bb72d3c6fe7588bb72dbe633cef4c1f47de6a84166f59785c8d8112a5c55b16df31c645baed5cd6082d96597896e5588b6516df31ded74ab79d4b1ba1c5520b8fabf11aa2b4586af11de3f548fa1edf924668b1c4c2b324c75a2cb1f88ef15951fa1c7c7123b4586ce1599c632d1683ef3db1fbcef4e7161fd217eb7c438b6228734a87ccaff4c58ad251d681fdcab02e6fc65e974cbfb24511757913ea2265ce80bab4099c8c51d4cd515dd331f306d449adf7234b5da5cc391dea74e9a4f309d8261f836e7d2cff97a9c8984f415ef453757e2dfe3aa763f555e04c811ff4fd0ab0c6e4bb0bfa2ed249fc88bd18f2bd3bd4959572a287682dec6a1f795de791dd5c6eb1b15c299479dd52ff54106ffd5f33785e3398d3ef3d409c491cb969bb324caf4768743e682465b0cfde478e78cc3e84c221fe5419d9fead8d32d88752ca5c086d14f62b957a2682fdfb4d3a6acbba20bbac5be6c55f29d8f600a35947151f9f41df4f192b42c69150361917a22baca7a7615375ede5a8aee24bd62df3bd8051c6a9e8997bc66463197b188c8aa78f03cd70ec0d991a3a5ef4019ede0e781cd5337d1caa30ead4cba8532994c1771b2b1cd4b308fccaba65be027cbbd8e6a8851c93cf31b4288632c38df3c7281d651d2a7e7b5aead2cf715d64ddd22ef5cb81ef4ac37777c37722a8bf9d83a0e1fdab1298fb3a6056ebed1fff7acbf1bc4d624afc74873a0d000de2aa13ae4bcef30618da16437e2a9ce74939292bc72f6157b12cdb12d9cde5fa18cb9542997e96faa78278ebdfdfe0e96f30ab6d72179cdb39d81fd231d0cfe090f9eea05dff08edfa817652068f7f3d1c69d7d7e091f91ec023e7381560937305e14fc0ffbbe680db6cf72a2cdc62c371e27a5818bbc7cf983ed7e96130ca7c7760145b5fe0a974a499b9adcf31f4c1e3726ba38c2c5b0c6566c1b1316129abf6bb8e4575f56aa9edb1bd3ba6dbf4d60ef4c2711a03d02730340c402fa9672b073c6d83bab11a274fa99d34e2ce51378cca3c7a14b46203137f8b2cd5680136ccb7b4d882a0fe9094c5609321295b81ad85210b0e8529e565483b1772a11eb2ee6283b30db0c4e91b87f394a9a1d03904785c84b20a1d19d25387ce2d93c64c1985f1d1cae06c4aeca8ffb56ca05cd4ba5c6d07739f48c1bc1983c58efcb784faa6605efca96d53aaf313468cbc7bc0a43ba78e1b357eca6414cadcb1315f14d4df00e66f94e0ae763a0c00ac30360ead8c7a618321ff930dd3367ece6e3866aea94d00fe646a0bba1dea4037b57e19fb76e488b163af9b5a3576ccc84ba78e1f39654ced78dc9a6d0ce5a2b6b4fcbf35d86c4d3c965513365bb8ec21169b6dc25186db804d8e5c87824d78da82ad25e4a5bcb9659c846b4758bfec52ea7f4a9c56bae287047521208763d5aeaafd577d3e569d06a9a18ed5d0c66a73aaa18bd51d433534b1fa8a9d1a7a580d35ac86163e21c80c1dac860a3e39c80c05acbe7651166486f63d2dc80cdd7b4690199af72ce0fb36309f1d644ebbd4d0ba9d82ccd0b9ead6a57a755d7de64dbd5baf4edfd56d0175caab2ef1d4e9a73aed549717eaf685ba95a54ee9d4e9b23a1554a76fea72a4bfd67a40982e0cd34561ba384c9784e9d2305d16a6cbc3744598ae0cd35561ba3a4c03c3744d98ae0dd37561ba3e4c3784e9c630dd14648677be39c80cbfae867fbe35c80c0d7d5b901936faf62033a4f41d4166b8e911416628ea91416698ea51416608eb3b83ccf0d66382cc30b9770799a176c70599e17ad570d86a986c357cb61ae6570d09ac861456430dab6189d510c66a08643534f2fd4166c8653564f3434166d8e7e9617a244c8f86e9b1303d1ea627c2f46490191e5c0d1b3e23c80c33ae861f9f1d64862b9f1b64863757c39eabe1d0d530e96af87435acba1ae65d0dffae86857f314c2f85e9e520f348423d8a518f28d4ed7ff5184cdda27e33c8dc3a5f12641e71ab47feaa0b84ea12a2bac8ac08325da8549732d5c54e7539545d30559754d545577559565db8559776d5c55fbdf2a05e0151afc4a85784d42b53ea1532f54a9d7ac550bd26aa5ebb54af11abd7aa770799dbe27b83cca352753b5c3d1a50b7ccd5edfb4fc3f4ad201393df09d377c3f4bd307d3f4c3f08d30f83ccb0c66ab863355cb21a5a590dc3ac866c564339aba1a0d5b0d19f0599a1a7d5d0d5bf0d324362ff3e4c9f87e98b2033bcf69761fa6398be0ad39fc2f4e730fd254c7f0dd3dfc2f42f61fad730fd5b98fe1ea67f84e99f41dd30dbd8909ca05b1f7d05138c983265d4b80953caa6d4968d9b3a76ca980963ef2b9b3666cae8b2da7b464daa195b3b0d17feb65e58c6081f3069d288fbcac68caf1e756f59edd42965b5356555b553c757d73b88ff452f74d2fe1e475457473bfbcf6f42fa7f9be8f450dd2ecae8eb57345cb792964d10e488a62cd4a365d32a34491fc1e452f7c6cc7970d9e4b1b553cacacbc6877fc3036fedb451d59dcbf07f934391274f299b3c65c4a4296535936ac79575e98ceb7db86d132af15f6dddc09c7942d3c4e9a8bfb3d4a410fbe5a94d50e03f4e6d1a69ebb26f40dab6ac694ecbca9a50c3b39ab2d0954d24bca92c5296c953aba64c1a31724af4c2b77e9385ef684a35c737b19a27776882b3d39bb2d0800e4d23bca329ce6666e12cf86f5a25cf63845506009b2d6c6f00000028461f8b08000000000000ffed9d77741cd775c667d158164b1024c15ea046b3015c2c1a0136b0774a9464f5429004455a24419150b32c4bb224f7debbe516cbbdf758a97612274e1c3b96bbe36e4b2eca3f39ce49cef1c97bb3ef1a1f1e67d658682e78077be79c8b7d73f7eddcdffbe6ce9bd9f766074f054190098a4bb5b18b8273177abfcfbde69fded296e0b6f29c9c99947056a584b33a259c3529e1ac4d09675d4a3827a58473724a38a724c869d9aa82914bd2bc5319744d9a319b324deb53a0692e659a4e4b81a60d413afaa8e929e16c4c09e78c9470ce4c09e7ac947036a58473764a38e7a484736e4a38e7a584737e4a3817a48473614a3817a58473714a3897a484b339259c17a484f3c294705e9412ce8b53c27949829c2b8173a97b7d867b5de65e97bbd715ee953eb3cabdb6b836d6b8f55663ab2d9bb136efbd82b176631dc63abdf7ba8c751b5b63acc7bdd7ecdeeb35b6d6d83a63eb8d6d30b6d1e9b0c9d866635b8c6d35b6cdd876633b8ced34b6cbd86e637b8ced35b6cfd87e63971abbccd80163971bbbc2d895c69e69ec2a63571bbbc6d8b51ecb75c6ae377683b11b8ddd64ec6663078df51b3b64ecb0b123c6068c1d35768bb163c68e1b7b96b15b8d9d3076d2d8296383c64e1bbbcdd81963678d0d19bbddd81dc6ee347697b1bb3dcd9e6dec1e63cf3176afc7f95c63f719bbdfd803c69e67ec41630f197bd8d8f38dbdc0d80b8dbdc8d88b8dbdc4d84b8dbdccd8cb8dbdc2d82b8dbdcad8ab8dbdc6d86b8dbdced8eb8dbdc1d81b8dbdc9d89b8dbdc5d85b8dbdcdb1d081f07663ef30f688b1771a7b97b1771b7b8fb1f71afb0b63ef33f6a8b1f71bfb80b10f1afb90b10f1bfb88b18f1afb98b18f1bfb84b14f1afb94b14f1bfb8cb1cf1afb9cb1cf1bfb82b12f1afb4b635f32f698b1bf32f6d7c6fec6d8df1afb3b637f6feccbc6be62ec1f8cfda3b17f32f65563ff6cec5f8c7dcdd3fc5f8dfd9bb1af1bfb77e7fb867bfda6ab4be362ff61ec5baefcb87bfdb67bfd8e7bfdaef799ef19fbbee7fb81b11f7abe1f19fb4f57feb17bfd897bfda97bfd997bfdb97bfd857bfda57bfd957bfdb57b7dc2bd3ee95e7fe35e7feb5e7fe75e7fef5e9f32765953b13c39185efa8284faa88ea3793ba742e22f0d462e568b6af71ebd363b7f8d5ba757d2aed6add77afe3ab75ee76d67b25b9fecf91bdd7aa3e79fe9d6677afe26b7dee4f9e7b8f5399eff62b77e31f8b3018cb93abff5553b57067c94af55e0ab75be6af0d5d1e6c037c9f96ac147fbb70e7c539c6f12f8a63adf64f0659d6f0a6969acdef9fa82a47225df6fb79b4b7abb6e1e6a5af2bc87ed761b9878a727cf3b60b7dbc8c06bf36386dbd674c89b99ced708be59ce37037cae0bfad331677db39d6f16f8e6385f13f8e63adf6cf0cd73be39e09bef7c73c1b7c0f9e6816fa1f3cd07df22e75b00bec5ceb7107c4b9c6f11f89a9d6f31f82e70be25e0bbd0f99ac147f7b85c00be8b9def42f05de27c17818ffada8bc147d78697389fed272667e033ce4f7d54f819ea9fc1b78cfa66f02da77e197c2ba84f06df4a884dbe55d0af90afc5f9a88fb2eff5ba725f90d43151088f89b5496fd76cd96e777df2db0de7ed3604c35af7419cb5a0d546574ef0dea0368c9d714671c85f03e55d5097ea911e749e21767b3e59e7ca1b4b7caed7fb5c0eeaac8b687f5f906cfbd77b3ceb3de65a683f4fceb617346747bd949db357435d3ff7e89a6722e6ec5ee060c8d92ecdd9512f65e7ec00d4f5738fae7b2762ce5e071c0c39dbcf93b385bce66c718c2c08a2738fbefb4cc49c3d061cc9e76ca7e6ece897b273f601a8ebe71e7dff9d88397b0770249fb3ddfd7a6d30eaa5ec9c7d05d4f5738fc6622662ce3e041c0c393ba0fdeca897b273f66d50d7cf3d1a179c8839fb6ae0483e677b9872b65d733628ce77064174eed118f544ccd9478023f99c3dace3b3a35fcaced9cf435d3ff768be6422e6ec475cd9ce337cc3cd332c04df379d6f11f0269fdb473a9872bba0b95dbc0f2408a27394e6ee26626e3fe6ca368f1f877b0fc8f76de7bb007cdf71be0bc1f75de7bb08dac5700cf4eb3130eaa5ec63e0fb50d7cf659a479e88c7c0d7818321670f6bce8e7a293b679f80ba7eeed13d0d1331677f041c0c393ba0393beaa5ec9cfd03d4f5736f992b4fc49ca5fb4aedf5c28fddf5c20af0fdc4f95682efa7ceb70a7c3f73be16f0fddcf95ac1f70be75b0dbe5f3a5f1e7cbf72be36f0fddaf90ae07bc2f9dac1f7a4f37580ef37ced709bedf3a5f17f87ee77cdde0fbbdf3ad01df53ced7e37c76be8beebdfaaaf3d97d4b1af505c9ee5bbac792b64debabc621768317bb611c63377ab11b2362b730c4ce420c5a32de7a1f945b7879f2b960e4ef3f28d6eae463b5dbb6b706a36ffb6ae0c933b43d0b3146c393079eb6e479c27b7d0bc96f37dcc7ad9ea65988d50aed6a6768570662d1b6699de2e5c087fd777b046347f28c850cc4a26dd37a0730920fcf27745ea7e3c79e0f97668679198ea5f09a88e2d1b3bf886335f8a9ceef670db3ad706cf5f03e9e5bdb3c1f535e867941b168dbb44ef1eaa13d6de3cf58182d63de63e4ea2332108bb6edc7c6e3bd65fc351bd57ecd81ef3cf44985b1f649f5c0361ed72971fb5a4a6c8ef355066250df469a17c04f7566bb1f24d8be6d07f4bb0cc75fa1dceb37ec0f92cfe3421e8febd1f0b4030fc7b1cf74bce6f1bcffc720d95cebf4b46af3b4ca419d0ed0af9341bf52d721144f99955999955999955999955999955999955999955999955999955999955999e533e3fd1738bf49f5560961245f017838c6f9c3e747b96dd1f6edbcce77605e27f9798b421ee72ce91ec3e55e9b6ba0ce9399e1ba3f80f9747f6e10e73457f16a37aafb2cea8373e76239e710e3e681a3e62f9b138b5d38cc35df669fa1629f43d6eae9ba2a425386fb5446689af134c5fb14577a3c364fe7550fb371ccfd953b17895a5139c9b93dbcc78077bf14fb0fca85aa6064ff81e799aec4638f9cc3a4f9f22e2f760dd4f99fccf0bea17b51e9ff1cfaf73cd93adddeb6e933cbc1dfed6dbbc17d96386abdedb7c267a9ceff419ffaf6aae04f9a71dcff81fd72006dc5a50fca386f9efc79b8388fdf5e064f27f070f4334cd71b793c06929ec7eff6b48aba8ea13a5da05f37837e51d7a2b44ef194599995599995599995599995599995599995599995599995599995599995593e33fe569458b350af2084719cee7d08e733e8f92fb47d3baff3d2aae1b8dcf37034e7b4c26b730dd4f95ad570dd57ba727d70eefd0e71fb92613eafe4bea478f5d01e9c0be2fa3d7787c7d311a105959b138b5d9cc74f5ee3e179fc764fd74284a65cc72bceb1a2a678bcb6793c38375a1f9c7b6f4916b6331ef70ec5e505c5c363a9037c54c6df4773ec673c97f8f7f5503c9cbf7ed469db1070edfb429eb3df58036dea0bcecdef1aa8f361e8fb3eeaca780f07de3bf258c4fbb4949aa726fd589e65972fcefbae05ce3e8883b1d7016b42b1db3076c619c5217f0d94bf54355c97ea911ea435b1db63849e0986ecfee7dabccfe5a04e4f44fbfb8264dbdfebf1f47acc769f7c02f2ec3138ff73f5493d311a2d078da80e5e0771dd93e7f791fefd8d78df5e9d5707af59a8ce57a08f8abb7f34ea9e43aef358dc3d8751d7c69dc0e8b7d1bfcfb3d2efd37a1cfa8ba4efd37a1c7208efd30abcedaf80ed13575d107f6ea13adff3b6ef5f93d367f03e30aaf343e82f1adc3d8bf5c1b9d7df78cfd4787cbf8abb4f9ae2e1750d1edb7faeed96790dd4ef4b9019730259f03a81eafccadb67dd31dcab233efb64cc6749ab1657c6ef2fbe7e56871ef84c5f223a148ff95eaf2d94d73dd016aaf35fde3560f2d72dc56bc0e4db3af29a84fa818e88b6529dff8663ed0f708d47fb09bf77d4559ffb3e2da5ae01493fdbe6f17e3e30c696f07ce0daeae1bafe737e49eb729f0fdce57d4ee2f381ff17f2ac0eee43e7eaabd7c568b40234a23af8db203a8fe0b37ca3ce315cf7f6c79d63a29e4189fd7343f5f8b3f9e36a51d70854873e8bd708b31c7383d3d9afeb8f17d2f932c9fb86f1b712ad10177f2bd1caa4671e74eb8375bc2e389fb1f34cb1e39e399d1f87d871cf9c1e8fd88d5eecc6718cad9aabe6923467782672f8fb337c66a95d4a5d9712430e3e579502c6ea1430d6a480b136058c7529609c9402c6c929609c9202c6a92960cc02e3f93cb733e85318ab3e5cfbabd4b506c66e61d2a29cffdfc1fcbf544a5efb606c86ef74a1162dc1e8b5c0ef791ccf7e28f77fbd1003feef821929609c9902c65929606c4a01e3ec1430ce4901e3dc1430ce4b01e3fc14302e4801e3c214302e4a01e3e214302e490163730a182f4801e3852960bc28058c17a780f19214302e55c6441857f23216c6ca687938fee7dfd3f99f630c3cf9a87b4e997e7b52f6ff5b637e3e69db589f1b87f796f0fe4fb8a7f76c3b8e7b47ca7db65da9ffb7cac458182b23d77decf83b9ed1f0e0ef22a37e5bc3c058182b23d7ef5ff0377aa3e1e902cd3a233463602c8c9591eb5eb972efe5c47bfabb223463602c8c9511efab4e9027d4acbb0c9e35a0597784660c8c85b13272dd979c8518a3e1e901cdd64468c6c058182b23d36fdb42cd7acae0c1df80f54468c6c058182ba3e559cba4596f193c6b41b3de08cd2431224fd2cfc9ee8d88c5f19bc172db4e0cc83825058c5353c088f74970f45fa5ee93e8e5d5a730567db8f657a9fb243036c3ef63422df0f7107f4e8bf5bc3c25ef93c0d81b98b4c0dfabfc392d36000fc7ef67b21063343cc49083cfcd4801e3cc1430ce4a0163530a1867a780714e0a18e7a680715e0a18e7a78071410a1817a68071510a1817a78071490a18f1bb2ac3b562c9ef2f1b2678ecb8ef2a133d76dcf792891e5bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73c97143b0d63fcca38f11891a739399e3cb61d63f509687b5f044f86a9ed186b9380b61343da1837a680716d0a1855c7e23d886361b43c9b99783695c1b31978b630f16c2e83670bf06c4d9e27cca92d65f010430e3eb736058c1b53c0a83aaa8e921855c7cad1511995511995f17c30a6a10f57c654e46361ac8c96675bf23ca1665bcbe0d9069ad1e7da78190b6365b43cdb93e70935db5606cf76d06c5b84660c8c85b1325a9e1dc9f3849a6d2f83670768b63d423306c6c258192dcfcee47942cd7694c1b31334db11a119036361ac8c966757f23ca1663bcbe0d9059aed8cd08c81b1305646cbb33b799e50b35d65f0ec06cd764568c6c058182ba3e5d9933c4fa8d9ee3278f68066bb233463602c8c95d1f2ec4d9e27d46c4f193c7b41b33d119a313016c6ca6879f625cf136ab6b70c9e7da0d9de08cda432ae4d01e3c6143032eb58182ba3e5d9cfc4b3af0c9efdc0732913cffe32782e059ecb92e70973ead232788821079f5b9b02c68d2960541d5547498caa63e5e8a88ccaa88ce531f6a58051f7b5324a6564f87e55f23734974ef0d80d5eec860a891df71b9a891e5bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73c9714fb40f2b10be53e63e600f0703cf386a99d79bbddcbddb6fe98a07e56ab2b3cad2ef5b4ca419dcb41bf2b18f4cb405cda36ad53bc72999f2180992976619ad9c614683fc5d8e8e961e35fc9d4f6b8befeca091e3baeaf9fe8b1e3fafa891e5bf35cf3bc12626b9e6b9e57426ccd73cd7329b1b15c1b0c5fb7d3f34fed369ee9ca356e1d59c94f752e9b547c6d08f418e288adc7909e2b2a21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad792e2fcf311faac68127f07882123c1b84f1ec16c6b34318cf1a613c8b85f1740ae3992b8ca7208c6786309eadc278a608e3592e8ca75a18cf26613c79613c7b85f12c11c6b34218cf3c613c3385f14c15c653238c67b3309ed5c278f609e3d9238ca75718cf52613c3dc278b609e3e912c6335f184fbb309e59c278560ae3c90ae36915c6532b8c67a7309e16613ccb84f1ec17c6b34e18cf02613c4dc278ea85f1e484f1d409e3592f8c6797309eedc278ba85f12c14c6d3218c67b6309e55c278a609e36910c6b34518cf24613c8b84f1cc11c6335d184fa3309ec9c278c6e37943e5f06404f06483739f499685f70f80afcafbacedafda9a86dfbfcaf9abe03357bb7275c4b6af021ffd36fcea88cfa24e57415bfa5c39fff49650278cd507eb14af1e38ae16c2734018cf64613c8dc278a60be399238c6791309e49c278b608e36910c6334d18cf2a613cb385f17408e359288ca75b18cf76613cbb84f1ac17c653278c27278ca75e184f93309e05c278d609e3d92f8c6799309e16613c3b85f1d40ae36915c69315c6b35218cf2c613cedc278e60be3e912c6b34d184f8f309ea5c2787a85f1ec11c6b34f18cf6a613c9b85f1d408e3992a8c67a6309e79c2785608e359228c67af309ebc309e4dc278aa85f12c17c6334518cf56613c3384f11484f1cc15c6d3298c67b1309e35c2787608e3d92d8c6783309eaa081e86ff7f19f2d0fd6bb46d5a3f202436c37e08ffefe7354c6dbad66dabd66d97f8295e0dd4b9ce5d18d8fb51f0b3c4e5df6f88f7ce5d0b1a5dcbd416da1f196fff30c72ee07d950130049e3e41040fc7fda84ced1c918709feffd9bcd5ea3a4f2b7fdfe5a0ce35a0df750cfa45e5f69f8e01f79a4666cb43e70e62cd42bd0d4218c977252f4f78dc6e08462ea58edbeb8087a30f636a67787c5defb5694384ee540773f57a8676461d3bb47e3dec87b4315b9e4dae4cac59a8b7490823f9aee5e5098faf4dc1c8a5d4f1753df070f43f4ced0c8faf1bbc366d8ad09dea60aedec0d0cea86387d66f80fd903666cbb3d99589350bf5360b6124df75bc3c1d5968332da58eaf1b8087a3ff616a67787cdde8b5697384ee540773f5468676461d3bb47e23ec076556e62866cb43bf3121d62cd4db2284917cd7b3f274e4b3d0665a4af56337020f473fcfa47bd88fdde4b5694b84ee540773f5268676461d3bb47e5344ece620592d6e1e85163747f0dc3cce5a50bc7299af4921b3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaab35d5467d55975569d9360569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e6396a0b3e5a167c4106b16ea6d15c248be1b7879c2df056d0d462e196fbd0fca3703cf8d0cfa30b533bc87fca0d7a6ad11ba531d3cbe0e32b433ead8a1f583b01f0e96c17c530a9955e7b1315b1e7a562cb166a1de36218ce4bb919727ecc7b605239752fdd841e0e1e8e799da19f663fd5e9bb645e84e75f0f8ea676867d4b143eb144f9995398ed9f2d0ffb021d62cd4db2e84917c37b3f214c2df376e0f462ea5fab17ee03998384fb11f63d03decc70e796dda1ea13bd5c15c3dc4d0cea86387d60fc17e2887f9a61432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393a5b1efadf21c49a857a3b843092ef202b4f7b38efb02318b964bcf53e281f029efec4798af30e0cba87f30e87bd36ed88d09deae0f17598a19d51c70ead1f86fd30d1996f4a21b3e6c6f8306b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7314bc80dcbb3d39589350bf5760a61245f3f2f4ff8dc839dc1c8a5d47d3b8781e710833e4ced0cefdb39e2b5696784ee54078faf230ced8c3a7668fd08ec076556e62866cbb3cb9589350bf576096124df215e9eb01fdb158c5c4af563478087a39f676a67d88f0d786dda15a13bd5c15c1d606867d4b143eb03b01f945999a3982dcf6e5726d62cd4db2d84917c877979c27e6c77307229d58f0d000f473fcfd4ceb01f3beab5697784ee540773f528433ba38e1d5a3f0afb419995398ad9f2ec716562cd42bd3d4218c9778497a7908536d352aa1f3b0a3c1cfd3c533bc37eec16af4d7b2274a73a98abb730b433ead8a1f55b603fa48dd9f2ec756562cd42bdbd4218c937c0cb131e5f7b83914ba9e3eb16e0e1e87f98da191e5fc7bc36ed8dd09dea60ae1e636867d4b143ebc7603fa48dd9f2ec736562cd42bd7d4218c9779497273cbef605239752c7d731e0e1e87f98da191e5fc7bd36ed8bd09dea60ae1e676867d4b143ebc7613fa48dd9f2ec776562cd42bdfd4218c987e78bfd4c3c398f2717a1c5448cdde0c56ea890d88d5eecc60a89ad79ae795e09b135cf35cf2b21b6e6b9e67925c4aed45c53cd2b53f3cc79d43c731e35cfa8e62235ff6372b13bb15fa98258c798da894b1f94717c8e9635c278160be3e914c63357184f4118cf0c613c5384f12c17c6532d8c272f8c6789309e15c278e609e399298c67aa309e1a613cab85f1f40ae3592a8ca747184f97309ef9c278da85f1cc12c6b352184f56184fab309e5a613c2dc2789609e359278c6781309e26613cf5c27872c2780e08e3a913c6b35e184fb7309e85c2783a84f1cc16c6b34a18cf34613c0dc2782609e359248c678e309ee9c2781a85f14c16c69311c0930dcefd3d0afe9ea01a7c747fff7ef03dcb950f80af2a22066de738f868fc94b661fb9b754de73254c1676e8de07a56443c8a736bc467c743778cd507eb14af1e386e15c23359184fa3309ee9c278e608e359248c6792309e06613cd384f1ac12c6335b184f87309e85c278ba85f1ac17c653278ce780309e9c309e7a613c4dc2781608e359278c6799309e16613cb5c2785a85f16485f1ac14c6334b184fbb309ef9c278ba84f1f408e3592a8ca75718cf6a613c35c278a60ae399298c679e309e15c2789608e3c90be3a916c6b35c18cf14613c3384f11484f1cc15c6d3298c67b1309e35c278aa22780e30f1c43d4fe18080d8763d0fbad8250bef8fc7ef000f788cb47e0c18919778f24c3c71cfa0c80b886ddb4fdf25680e2e0befe3efb8b8722aef31d27a544ee17d69ab9978e29edbb15a406cab058d5dd23d0059781f7fb7c09553ab3d465a8fcaa9465e9ef07f4bb404239752f71ae131c7b10f99da99c7e32fc16768443e8bbac5d30a9fa13a1ef7c9c7f507144f9995398ed9f2d0dc05b1e2f96c3c7ef7361ac6a8f32b034fd83fb606239752fde331e0e1387f30b533ecc74e786d6a8dd09dea60ae9e606867d4b143eb2722623707c96a7172145a9c8ce03939ce5a50bc72990fa4905982ce9667952b136b16eaad12c248be3c2f4fd83fae0a462ea5fac793c0c371fe606a67d8279cf2dab42a4277aa83c7d7298676461d3bb47e0af64339cc2752c8ac3a8f8dd9f2d01832b166a15e410823f98eb1f214f25968332da5fab153c0c3d1cf33e91ef663835e9b0a11ba531d3cbe0619da1975ecd0fa20ec076556666556666556666556666556666556666556666556666556666556666596cd6c79e8b78dc49a857aed4218c9779295a738efd01e8c5c4acd3b0c020fc7bc0c93eee1bcc369af4ded11ba531dccd5d30ced8c3a7668fd34ec076556666556666556666556666556666556666556666556666556666556666596cd6c79e899dbc49a857a1d4218c9778a9727fcdd564730722935ef701a7838e66598da19ce3bdce6b5a9234277aa83b97a1b433ba38e1d5abf0df683322b7314b3e5a1675b116b16ea750a6124df202b4f71feb43318b994eac76e031e8e7e9e49f7b01f3be3b5a9334277aa83b97a86a19d51c70ead9f81fd500ef3891432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393a5b1efa9f6bc49a857a5d4218c9779a95a73d9c77e80a462ea5e61dce000fc7bc0c93eee1bcc359af4d5d11ba531d3cbece32b433ead8a1f5b3b01f263af38914326b6e8c0fb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb384dcb03cddae4cac59a8d72d84917cb7f1f284cf3de80e462ea5eedb390b3c6718f4616a6778dfce90d7a6ee08dda90e1e5f430ced8c3a76687d08f683322b7314b3e559e3cac49a857a6b843092ef0c2f4f210b6da6a5543f36043c1cfd3c533bc37eec76af4d6b2274a73a98abb733b433ead8a1f5db613fa48dd9f2f4b832b166a15e8f1046f2e179b9878927e7f1e422b4385fb1ed7aaf2bd7bbd72cbcdf0b8c5cfd618fc748eb98e3c84b3cbd4c3c0d1e4f438416e72bb66dff3a579ee65eb3f0fe3a60e4caa95e8f91d6a372aa0178d631f1347a3c8d115a9cafd8568bf5ae3cddbd66e1fdf5c0c89553eb3c465a8fcaa946e059cfc413d727ad1f87d871c7d778c48ecb95f188ad9aabe6aab96acea979e63c6a9e398f9a675473519a335c4785e3bd142300065cfaa08cdf1538ae3d99da998ffa3eb6de6b137e1fc33187f3f57d439995398e9969dca223ebc5267d028f879621662dc673dcb4d76b531ac64d4b319f4821b3ea3c36661bfb8ee4637764bdd8a44fe0f1d07207b3164ced0cfb833b83688d295e0eea609edec9d0ce0cc4a56dd3fa9db01fca613e914266d5796ccc36f65d89c72e3e4f1e63933e81c743cb5dcc5af0b4b3d81fdc1d446b4cf1725007f3f46e867666202e6d9bd6ef86fda0cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccb2996dec67271ebb387e8fb1499fc0e3a1e5d9cc5af0b4b3387e7f4f10ad31c5cb411ddce7f730b433037169dbb47e0fec076556666556666556666556666556666556666556666556666556666556666596cd6c633f27f9d8e1ef713036e913783cb43c87590ba67686e3f7f706d11a53bc1cd4c17d7e2f433b331097b64debf7c27e5066658e62b6b19f9b78ece27c1ec6267d028f8796e7326bc1d3ce627f705f10ad31c5cb411ddce7f731b433037169dbb47e1fec8772984fa4905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7cad1d9c6be3ff1d8ede1f83dc6267d028f8796fb99b5e0696771fcfe81205a638a97833a98a70f30b433037169dbb44ef12a81f9440a993537c68759734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59426ed8d8cf4b3e76f87b768c4dfa041e0f2dcf63d682a99de1fd2f0f06d11a53bc1cd4c13c7d90a19d19884bdba6f507613f28b3324731dbd80f251fbb90f562933e81c743cb43cc5a30b533ec0f1e0ea235a67839a883fbfc61867666202e6d9bd61f86fd903666dc7f99e46287f76d528c2af76a7dcf77e56af0bdc0956bc0f74257ae05df8b5cb90e7c2f76e549e07b09b48d7c2f75e595e07b992baf07dfcb5d791df85ee1cabde07ba52bf780ef55ae3c04be57bbf2ede07b8d2bdf01bed7baf29de07b9d2bdf05bed7bbf2dde07b832b3f1b7c6f74e57bc0f726577e0ef8deeccaf782ef2daefc5cf0bdd595ef03dfdb5cf97ef0bddd951f00df3b5c7929f81e89f0bdd3959f07be77b9f283e07bb72b1f00df7b5c790af8deebca53c1f71750a6d7f7b9723df81e75e51cf8deefcad3c0f701576e00df075d793af83ee4ca8de0fbb02bcf00df475c7926f83eeacab3c0f731576e02dfc75d7936f83ee1ca73c0f749579e0bbe4fb9f23cf07dda95e783ef33aebc007c9f75e585e0fb9c2b2f02dfe75d7931f8bee0ca4bc0f74557c6fdfb97aefc10f8a85f79187cd4af3c1f7cd4afbc007cd4afbc107cd4afbc087cd4afbc187cd4afbc047c94772f051fe5ddcbc04779f772f051debd027c9477af041fe5ddabc04779f76af051debd067c9477af051fe5ddebc04779f77af051debd017c94776f041fe5dd9bc04779f766f051debd057c94776f051fe5dddbc04779f776f051debd037c94778f808ff2ee9de0a3bc7b17f89a5df9dde0bbc095df03be0b5df9bde0bbc895b19fb9d895df07be4b5cf951f0515ff87ef03dc3953f00be65aefc41f02d77e50f816f852b7f187c2b5df923e05be5ca1f055f8b2b7f0c7cadaefc71f0ad76e54f802fefca9f045f9b2b7f0a7c0557fe34f8da5df933e0eb70e5cf82afd3953f07be2e57fe3cf8ba5df90be05be3ca5f041f9dc7a99fb1c7b33d2e4907d2c8faa8cdad116d21df64684b5f90ec351dc5a26dd37a3b30d23e288c3f6361b48c6d1ea3e5e964d00cf38a9652df993a81a7838187a99de177a62eaf4ded5e9b7250e719d0ce2e867666202e6d9bd6bb2036c73e472d6add7697795ad4601d7742b3e7d3523ad2366cfe1622dad2c3dc16da36f54b3de310bbdb8b9df762637f4c4ba9e3ab1b98d73030dbedf626bfddf0f85aebb645394571f2d0a675a041526dc2d819671487fc35509edf345c97ea911e74fe22769bcbb42f91ddff5ca7f7b91cd4e989687f5f906cfb7b3d9e5e8fd9ee9386a6610e86e321cc811e8f83d6f3a05d6f8c763da01dd5c1f35f0b93766b3c1e5a6f011ebac6e9021f5d2b103f5e67b58e03b7dfef75457093af1b185b22180bc93386d73a2d1e23ad1780917c6b80a79b49337f5f2ff3f4c1f3729d57873e5b037556c3b9311b51d71e774b33c3eda2efe07f0c92edd3eb18f4c2f18100f4093c0d03d08bda59cbc03335181e23383b3478a6ff9681cb07fa8f6400adc6c3c4d74c4433aac087e5ea085f108c1c0ac121591a0ac121d92a4f161c82a1faf6ab946d160d370c9c3c3ef4cc5303a70e9fb9fbf4d0c091bd83b72075ad478fa4712d4052f4d13239181eb4e90b929d8ca9f362954a9ec9f03a09dea73af9a7b7b431b5333ce94df1da54e7b52907756ae1bd290cedcc405cda36ad4f89889d6047146a3175145a4c8de0993ace5ae0c037f9f048a5f771f2a4ca6b0b1ed1d8263fcf136d10055c0adbcf3838fb9e3dd86b5d632605c33b9b7a4f7b456b77821d31b5672d3b226a47406d17644738ed88a63da9d9114b3b42694724ed08a41d71b4238c7644d18e20da11433b42d81c144700ed889f1de1b3237a9700db5781d77eabb667483b226747e0ec889bbdb2b25700f66ac45e7ddb2b453bfa61af10ec374b3bca60cfb6f64ac69ea5ed99d55e29da2b447b456faf70ed2cd506631b9dd69b8c6d36b6c5d85663db8c6d37b6c3d84e63bb8ced36b6c7d85e63fb8ced3776a9b1cb82e2e8fae5c6ae3076a5b1671abbcad8d5c6ae3176adb1eb8c5d6fec0663371abbc9d8cdc60e1aeb3776c8d86163478c0d183b6aec1663c78c1d37f62c63b706c53b744e1a3b656cd0d86963b7193b63ec6c509c31b333647646ccce80d9192f3bc36567b4ec0c969db1b233547646cace40dd1f146798ec4c919d19b2b3027616c08efadb51fe1706c5517c3b6aff92a0382a6f47e1eda8bb1d65b7a3ea7614dd8e9adb51723b2a6e47c1eda8b71de5b6a3da7614db8e5adb516a3b2a6d47a1eda8b31d657e24288e22db51633b4a6c4785ed28b01df5b5a3bc8f06c5515c3b6a6b4769eda8ac1d85b5a3ae7694d58eaada51543b6a6a4749eda8a81d05b5a39e7694d38e6ada514c3b6a694729eda8e4978c3d66ecaf8cfdb5b1bf31f6b7c6feced8df1bfbb2b1af18fb0763ff68ec9f82625efeb3b17f31f63563ff6aecdf8c7dddd8bf1bfb86b16f1afb0f63df32f6b8b16f1bfb8eb1ef1afb9eb1ef1bfb81b11f1afb91b1ff34f663633f31f653633f33f67363bf30f64b63bf32f66b634f187bd2d86f8cfdd6d8ef8cfdded853c1f0ec0676227f702b34d2de3f343470f2f450f3d060f3c9db4f0c1d3f7de2eee63b8f0f1d6b1ebc63e0ccd1138377e287dfe7ba2d9a46d874e64cffddcdc74f1d19b8ab79f0f6a1e6c1a3cd87066f3f75e42c7ee8cbee430bcf8dd87fe4487cb06f553d0dd2ef8e31e82fdde768826657e9b63d3116419e1acb8766568fad4197bab30e7d7bbfa278b5db7cf6c4e05073bef994f9db7fc27c66e0486b33be77d6887c76a8f9ec50ff99a1e6a367064f36b7b5e276af9d328646d4348de143ad4da36f79f0ffd2fd24f2250a0400", "privateFunctions": [ { "selector": { @@ -37,8 +37,8 @@ exports[`ContractClass creates a contract class from a contract compilation arti "isInternal": false } ], - "id": "0x2ac5b620337d4d32f0f31d09de1eb89b05a8ccb2877dc7b44fe59859f434732a", + "id": "0x13d35e4219fbca20acd2fe6e4d4077b2dfd7d61da6262e9fb0c4e60f2f7928e3", "privateFunctionsRoot": "0x2dc1f38d7be98a8e72227d6f8aec393c60db813a1819c9c86b02a00cc18f6687", - "publicBytecodeCommitment": "0x00946ee0c98a22b53261be74dcc14f4253a81ddac129eb2196bf395593e2245f" + "publicBytecodeCommitment": "0x1340525ead90736bb961f723384e234d2a74e81e37f6e1a6959cc750fbb27ec3" }" `; diff --git a/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap b/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap index f9d915e32b5..8107be7d43c 100644 --- a/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap +++ b/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap @@ -2,10 +2,10 @@ exports[`GasToken returns canonical protocol contract 1`] = ` { - "address": AztecAddress<0x17fb417ba14d8d8c7049fc4cc0e4e19d29370737f5e18ba8c09f931d708aa0e3>, + "address": AztecAddress<0x1d331783f36e24c4c692b4fa48ef8722797087a860641691baa70f4714f59905>, "instance": { - "address": AztecAddress<0x17fb417ba14d8d8c7049fc4cc0e4e19d29370737f5e18ba8c09f931d708aa0e3>, - "contractClassId": Fr<0x01b458a6e0576705fd2fd203f3d1f5a24a05b1ea38a83d4ab76118cf009bc36b>, + "address": AztecAddress<0x1d331783f36e24c4c692b4fa48ef8722797087a860641691baa70f4714f59905>, + "contractClassId": Fr<0x0e4083b228e62201ad0460ca654736a259f51c64a26bf64e7e1fae0b6f0d2301>, "deployer": AztecAddress<0x0000000000000000000000000000000000000000000000000000000000000000>, "initializationHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "portalContractAddress": EthAddress<0x0000000000000000000000000000000000000000>, @@ -19,10 +19,10 @@ exports[`GasToken returns canonical protocol contract 1`] = ` exports[`GasToken returns canonical protocol contract 2`] = ` { "artifactHash": Fr<0x18af4bb0ca6fe07d0ae6da493b2c7b1af038ee904721dbba9b6e571e6d495726>, - "id": Fr<0x01b458a6e0576705fd2fd203f3d1f5a24a05b1ea38a83d4ab76118cf009bc36b>, + "id": Fr<0x0e4083b228e62201ad0460ca654736a259f51c64a26bf64e7e1fae0b6f0d2301>, "privateFunctions": [], "privateFunctionsRoot": Fr<0x15d28cad4c0736decea8997cb324cf0a0e0602f4d74472cd977bce2c8dd9923f>, - "publicBytecodeCommitment": Fr<0x272f0210ebab7596bd339c61d267c523ce43c4c3108ab1b01447415d314c6db8>, + "publicBytecodeCommitment": Fr<0x01cbb57f7449ea71aabbf6b5b69d9d5ab7d82c640c751cf13ce9e850db32a66b>, "version": 1, } `;